一:专有名词介绍:
1. 新生代:在内存中存活时间较短的对象
2.老生代:在内存中存活时间较长或常驻的对象
3.Cheney算法:复制算法
4.Mark Sweep(标记清除):将需要被回收的对象进行标记
5.Mark Compact(标记合并):将存活的对象移动到一边,将需要被回收的对象移动到另一边
二:敲重点
1.对于新生代来说采用的是复制算法,将内存分为from,to,其中from:to = 1:1
(1)检查 From 中的对象,当某个对象需要被回收时,将其留在 From 空间,剩下的对象移动到 To 空间,
(2)然后进行反转,将 From 空间和 To 空间互换。
(3)进行垃圾回收时,会将 To 空间的内存进行释放
2.对于老生代来说采用的是标记清除还有标记合并的算法,这里不存在将内存空间分为 from和to空间
(1)将存活的对象进行标记
(2)将存活的对象移到一边,将需要回收的对象移动到另一边
(3)将需要被回收的对象区域进行整体的垃圾回收
三:扩展 【新生代如何变成老生代的】
- 在垃圾回收的过程中,如果发现某个对象之前被清理过,那么会将其晋升到老生代内存空间中
- 在 From 空间和 To 空间进行反转的过程中,如果 To 空间中的使用量已经超过了 25%,那么就将 From 中的对象直接晋升到老生代内存空间中