1.jvm年轻代内存回收 Eden:survivor=8:1
2.采用复制算法 Eden区满后标记后将存活对象房子survivor0里 如下图:
下一次Eden 满了 会将对象放到之前清空的 survivor1的区域里
问:
1.survivor的对象如何被清理 同样是标记-清除/整理算法嘛?
2.对象从年轻代到老年代是经过每次gc时候 还是动态的进入,当达到某一条件晋升?什么条件
PHP中文网2017-04-18 10:53:28
lz你好,之前看到你在我的文章淺析JVM之內存管理下評論了,同時也看到了你的問題。我的文章裡面都有提到:
survivor區屬於年輕代,使用的是複製收集演算法
經過數次(預設是15次)在兩個Survivor區域移動後還存活的物件最後會被移到老年代
特別大的物件直接進入老年代
怪我咯2017-04-18 10:53:28
推薦看看《深入理解java虛擬機》。
1.新生代的GC演算法幾乎都是複製演算法,也就是說,survivor也是被複製到老年代中去的。
2.對象從新生代到老年代,有幾種情況
2.1有一个年龄参数MaxTenuringThreshold用来判断,每次对象熬过一次GC,年龄加1,当到达设定的阈值时,可以进入老年代。
2.2比较大的对象(需要大量连续的内存空间),同样,虚拟机也提供了一个参数PretenureSizeThreshold,可以设置这个值,当对象大于设置值可以直接进入老年代。
2.3如果Survivor空间中相同年龄的对象大小总和大于Survivor空间的一般,则年龄大于或等于该年龄的对象就可以进入老年代。这里是属于动态判定,适应那些内存较小的情况
還有一些其他情況,可以看看書