JVM GC 过程简介
所属分类 jvm
浏览量 1086
MinorGC FullGC
Eden survivor from to
young old
MinorGC过程
新创建的对象先在Eden区分配
Eden满,触发 MinorGC , Eden区和 S1区的存活对象 转移到 S2 区
复制清理算法
对象进入老年代的4种情况
MinorGC ,存活的对象在S区中存不下,把存活对象存入老年代
大对象直接进入老年代
长期存活的对象将进入老年代 -XX:MaxTenuringThreshold
动态对象年龄判定 在From空间中,相同年龄所有对象的大小总和大于From和To空间总和的一半,那么年龄大于等于该年龄的对象就会被移动到老年代,不用等到15岁(默认)
FullGC
如果老年代中没有足够空间容纳存活对象,触发FullGC ,对整个Heap进行一次GC
FullGC后 还是没有足够空间 OutOfMemoryError
空间分配担保
MinorGC 前 ,先检查老年代最大可用的连续空间是否大于新生代所有对象总空间
如果有足够空间,那么MinorGC 是安全的
如果没有足够空间 检查参数 HandlerPromotionFailure
true 尝试 MinorGC
false MinorGC直接升级为 FullGC
老年代最大可用的连续空间大于历次晋升到老年代对象的平均大小,
在HandlerPromotionFailure为true的情况下,可以尝试进行一次Minor GC,但这是有风险的,
如果本次将要晋升到老年代的对象很多,那么MinorGC还是无法执行,改为FullGC
上一篇
下一篇
zookeeper为何不适合做服务发现
zookeeper在kafka中的应用
zookeeper如何保证数据一致性
micrometer使用
zookeeper 与 dubbo
LongAdder和LongAccumulator