JVM GC问题总结

一、什么时候触发年轻代GC??

Eden区满了无法再为新对象分配内存。

二、什么时候触发FULL GC??

1、 如果不允许担保失败,在Young GC之前,虚拟机先检查老年代最大可用的连续空间是否大于新生代的所有对象总空间,如果小于进行Full GC.
2、 如果允许担保失败,检查老年代最大可用连续空间是否大于历次晋升到老年代对象的平均大小,如果不大于进行FULL GC。
3、 如果允许担保失败,进行young GC时担保失败,进行FULL GC。
4、 如果在分配大对象时,大对象会直接在老年代分配,如果老年代分配失败会进行FULL GC。
5、 永生区空间不足。
6、 CMS GC时出现,如GC日志中找到promotion failed(晋升失败)和concurrent mode failure(回收时有对象要分配) 。
7、 空间碎片太多,堆中分配很大的对象(如果如此,建议每次FULLGC后开启压缩)。
8、在parallel Scavenge算法时:在年轻代GC后会检查老年代的剩余空间是否大于上次晋升的空间,如果小于进行FULL GC.

三、如何查看目前采用GC策略??

1)、通过jps –v  可以看到启动时配置的jvm信息
2)、jinfo -flags 4276  可以查看默认的配置
3)、jmap -heap 4276  然后根据查表得到GC策略

四、如何优化GC??

1、尽量把长期存活对象放到老年代,朝夕对象放到年轻代。缩短GC的停顿时间和频率。

可以把通过jstart 查看一段时间内留存在老年代和年轻代、永久代的使用空间。


http://jiasanshou.iteye.com/blog/2122486

http://jbutton.iteye.com/blog/1569746


猜你喜欢

转载自blog.csdn.net/dhfzhishi/article/details/80345647