内存分配和回收机制
2021-09-24 17:42:22 5 举报
JVM内存分配和回收
作者其他创作
大纲/内容
Full GC
第一种
第四种
Minor GC后对象太多无法放入Survivor,会直接放入老年代
4. 参数-XX:CMSInitiatingOccupancyFaction,这个参数表示当老年代的内存占用到一定比例了,就自动执行Full GC,默认是92%
老年代触发Full GC的条件
新生代
3. 新生代Minor GC后的存活对象大于Survivor,那么就会进入老年代,但是老年代内存不足,此时会触发Full GC
老年代可用空间
老年代
第二种
1. Eden满了, 触发Minor GC
小于
新生代进入老年代的条件
新生代对象经历垃圾回收15次后,会进入老年代;通过JVM参数 -XX:MaxTenuringThreshold 来设置,默认15次
新生代全部对象大小
Minor GC
新生代触发Minor GC的条件
第三种
动态年龄判断规则,按照对象年龄从小到大进行累加,当累加到某个年龄段的对象已经超过Survivor有对象区的50%大小时,则将大于等于当前年龄段的对象全部放入老年代中
大对象直接进入老年代;通过JVM参数 -XX:PretenureSizeThreshold 来设置,大于这个值直接进入老年代
动态年龄判断触发的时机:在发生MinorGC之后,将存活对象移动到空闲的Survivor区的时候触发
空间分配担保机制:在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间:1. 老年代可用内存 小于 新生代全部对象的大小,并且没有开启空间担保,会直接触发Full GC(所以一般空间担保会打开)2. 老年代可用内存 小于 新生代全部对象的大小,并且开启了空间担保机制,但是老年代可用内存 小于 历次新生代GC后进入老年代的平均对象大小(小于也就是担保失败),此时会提前触发Full GC空间担保机制在jdk 6 update24之后被废除总结:当老年代可用内存空间 小于 新生代全部对象的大小,并且没有设置空间担保或者空间担保失败,则会触发Full GC (担保失败的含义是老年代可用内存 小于 历次新生代GC后进入老年代的平均对象大小)
空间担保机制:2. 老年代可用的内存空间大于新生代所有对象大小的总和,则触发Minor GC3. 老年代可用的内存空间 小于 新生代所有对象总和,并且开启了空间担保机制,并且担保成功了,则会进行Minor GC(空间担保成功就是老年代连续可用空间大于历次晋升到老年代的对象的平均大小)
0 条评论
回复 删除
下一页