full gc是针对整个java堆和方法区进行的垃圾回收,那么什么时候会触发full gc呢
- young gc 之后,发现老年代不足以存放这次晋升为老年代的对象,这时候就会触发full gc
- 老年代收集(实际上,只有cms收集器会单独收集老年代,其他的基本都是old gc == full gc),当老年代空间使用率过高,就会触发了
- 主动触发,system.gc()等命令
对象什么时候从年轻代晋升为老年代呢?
- 长期存活的对象,年龄达到设定默认值(一般是15)之后,对象就会晋升为老年代
- 大对象直接进入老年代:老年代:新生代的比例一般是2:1,因此较占用内存的对象会直接放在老年代里面
- 如果在新生代中,某个年龄的所有对象大小已经占到survivor空间一般,那么年龄大于等于这个年龄的对象就会进入老年代(hotspot)