首页  >  问答  >  正文

java - jvm 年轻代 如何回收 survivor 对象

下一次Eden 满了 会将对象放到之前清空的 survivor1的区域里

问:

PHPzPHPz2743 天前895

全部回复(2)我来回复

  • PHP中文网

    PHP中文网2017-04-18 10:53:28

    lz你好,之前看到你在我的文章浅析JVM之内存管理下评论了,同时也看到了你的问题。我的文章里面都有提到:

    1. survivor区属于年轻代,用的是复制收集算法

    2. 经过数次(默认是15次)在两个Survivor区域移动后还存活的对象最后会被移动到老年代

    3. 特别大的对象直接进入老年代

    回复
    0
  • 怪我咯

    怪我咯2017-04-18 10:53:28

    推荐看看《深入理解java虚拟机》。

    1.新生代的GC算法几乎都是复制算法,也就是说,survivor也是被复制到老年代中去的。
    2.对象从新生代到老年代,有几种情况

    2.1有一个年龄参数MaxTenuringThreshold用来判断,每次对象熬过一次GC,年龄加1,当到达设定的阈值时,可以进入老年代。
    2.2比较大的对象(需要大量连续的内存空间),同样,虚拟机也提供了一个参数PretenureSizeThreshold,可以设置这个值,当对象大于设置值可以直接进入老年代。
    2.3如果Survivor空间中相同年龄的对象大小总和大于Survivor空间的一般,则年龄大于或等于该年龄的对象就可以进入老年代。这里是属于动态判定,适应那些内存较小的情况
    

    还有一些其他情况,可以看看书

    回复
    0
  • 取消回复