JVM学习

1方法区  (线程共有)

2堆   (线程共有) 堆内存不足(-Xmx -Xms) Java heap space

3本地方法栈(运行本地方法 Native方法) unable to create native thread(线程数超过了操作系统的限制) 给虚拟机分配内存过大(-Xmx,-MaxPermSize)

4虚拟机栈(运行JAVA方法) 栈内存不够(-Xss)

5程序计数器

6持久代 (方法区 常量池 非堆的部分NoHeap) PermGen space 方法区(持久代)使用过大 应用加载class过大,字节码生成技术使用过多 (-XX:PermSize,-XX:MaxPermSize) 回收“性价比”低。废弃常量和无用的类。

分代回收    Eden  Survivor1 Survivor

年轻代  YongGC  

老年代 Major GC 也叫Full GC(老年代存储的对象比年轻代多得多,而且不乏大对象,对老年代进行内存清理时)

分代收集    年轻代:停止复制算法中  Eden区与Survivor的比例较大,HotSpot默认是 8:1:1

                   (代表Eden:Survivor1:Survivor2=8:1:1.)

                 老年代:标记-整理算法:标记出仍然存活的对象(存在引用的),将所有存活的对象向一端移动,以保证内存的连续。

在发生Minor GC时,虚拟机会检查每次晋升进入老年代的大小是否大于老年代的剩余空间大小,如果大于,则直接触发一次Full GC,否则,就查看是否 设置了-XX:+HandlePromotionFailure(允许担保失败),如果允许,则只会进行MinorGC,此时可以容忍内存分配失败;如果不允许,则仍然进行Full GC(这代表着如果设置-XX:+Handle PromotionFailure,则触发MinorGC就会同时触发Full GC,哪怕老年代还有很多内存,所以,最好不要这样做)。

JVM参数说明:http://www.cnblogs.com/wenfeng762/archive/2011/08/14/2137810.html

参考:

1 http://www.cnblogs.com/zhguang/p/3257367.html

你可能感兴趣的:(虚拟机)