码迷,mamicode.com
首页 > 编程语言 > 详细

Java 学习笔记之 JVM初识

时间:2017-10-27 01:52:48      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:over   oom   排查   线程   jvm   代码   需要   物理   blog   

JVM初识:

 

java只是启动JVM的命令。JVM真实位置: C:\Program Files\Java\jdk1.8.0_121\jre\bin\server\jvm.dll

技术分享

1. 第一行JDK版本

2. 第二行JRE版本

3. 第三行JVM版本

 

技术分享

1. 混合模式:速度最快(默认)

2. 解释模式:解释运行

3. 编译模式:编译优化运行

 

技术分享

  • 在HostSpot中,方法区在Perm永久代。
  • Heap包括Young新生代和Tenured年老代,不包括Perm。
  • 一个java线程启动一个stack,一个stack默认1024K。所以开很多线程可能会导致StackOverFlow。
  • 本地方法栈通常用来调用C语言。
  • 程序计数器保存的是线程执行到哪段代码的位置。
  • 方法区和Heap是线程共享区域,其他块属于线程独享区域。

会OOM的区域:

  • Perm会OOM
  • Heap会OOM
  • Stack会OOM(概率很低)和StackOverFlow
  • Direct Memory会OOM

 

技术分享

  • 新生代使用的垃圾回收算法是复制算法,垃圾回收GC叫Minor GC。Eden区满了,就进行Minor GC,把存活的对象复制到Survivor1,Survivor1满之后,把垃圾又复制到Survivor2,如果Survivor都满了,就直接进入Tenured年老代。新生代和年老代垃圾回收的速度比大概是1:10. 年老代的垃圾回收叫Major GC。Full GC指的是JVM内的所有对象进行逐一排查,把垃圾删除。10g堆内存,可能需要5分钟Full GC。
  • HeapDumpOnOurOfMemoryError可以dump出OOM日志,说明问题出在Heap和Perm。没有日志,说明可能在Direct Memory或Stack,不过Stack一般不OOM。
  • Direct Memory直接使用操作系统物理内存。

 

Java 学习笔记之 JVM初识

标签:over   oom   排查   线程   jvm   代码   需要   物理   blog   

原文地址:http://www.cnblogs.com/AK47Sonic/p/7740191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!