一些GC的问题
minor gc如果运行的很频繁,可能是什么原因引起的
1、 产生了太多朝生夕灭的对象导致需要频繁minor gc
2、 新生代空间设置的比较小
minor gc如果运行的很慢,可能是什么原因引起的?
1、 新生代空间设置过大。
2、 对象引用链较长,进行可达性分析时间较长。
3、 新生代survivor区设置的比较小,清理后剩余的对象不能装进去需要移动到老年代,造成移动开销。
4、 内存分配担保失败,由minor gc转化为full gc
5、 采用的垃圾收集器效率较低,比如新生代使用serial收集器
永久代会GC吗?
会。但永久代没自己的垃圾回收器,到达临界值后,永久代是和老年代一起被GC的。
JVM、GC调优
- 分析应用类型,合理选择GC。比如后台任务多,要求吞吐率优先:parallel Scavenge;要求停顿时间短:CMS。 要求都兼顾:G1。
- JVM调优。如设置合适的堆栈大小,避免频繁GC;设置FULL GC的阈值。
- JVM分析,根据JVM日志调整业务代码或JVM参数。