美文网首页
3.6 内存分配与回收策略

3.6 内存分配与回收策略

作者: 小山包 | 来源:发表于2017-01-03 11:41 被阅读0次

    参考 《深入理解Java虚拟机 JVM高级特性与最佳实践》 3.6节

    1.对象优先在Eden分配

    • Minor GC:新生代的GC
    • Major GC:老年代的GC
    • 分配对象时发现新生代不够=>开启Minor GC=>Minor GC后发现存活下来的对象Survivors太大,无法放入Survivor空间=>启动分配担保机制把Survivors放入老年代中去



      Snip20170103_11.png

    2.大对象直接进入老年代

    • 虚拟机提供了-XX:pretenureSizeThreshold来控制当对象大于多少的时候,直接进入老年代

    3.长期存活的对象进入老年代

    • 虚拟机为每个对象定义了一个对象年龄计数器,每熬过一次GC,年龄就加一岁,默认情况下,超过15岁就会被放入老年代
    • 虚拟机提供了-XX:MaxTenuringThreshold来控制进入老年代的岁数

    4.动态对象年龄判定

    • 如果Survivor空间中相同年龄(Y岁)的对象总和大小大于Survivor空间的一半,则大于Y岁的对象可以直接进入老年代,无需等到MaxTenuringThreshold设定的年龄

    5.空间分配担保

    • 空间分配担保,担保的其实就是GC后存活的对象如果晋升到老年代,那么老年代要保证能容纳下这些“新人”。如果不能保证,则按照以前每次回晋升上来的新人数量平均值,跟老年代还剩下的控件做对比,如果剩余空间够,就进行Minor GC,但是这样也是有风险的,因为如果某次GC存活的对象量大大超过平时的经验值,那么老年代将没有足够的空间来放置这些对象,那么就要进行一次Major GC,也就是Full GC,而Full GC要费时的多,这个是要尽量避免的

    相关文章

      网友评论

          本文标题:3.6 内存分配与回收策略

          本文链接:https://www.haomeiwen.com/subject/owngvttx.html