【Java】JVM(二)、Java垃圾收集算法
一、标记-清除算法
算法主要分为两个步骤
1. 标记:
遍历所有的 GC Roots, 然后标记所有可达对象为存活对象
2. 清除:
遍历堆中所有对象,然后将没有标记的对象清除。
存在不足:
1. 效率低下。
2. 产生大量的磁盘空间
二、复制算法
原理:将磁盘分为一半一半,每次都是用50%内存,在内存用完了, 将这50%内存中存活的对象复制到另外的50%的内存中去。然后将过的空间进行清理。
存在问题:
将空间缩小为原来的一半
优化:
所有新生代的对象存活时间短, 所以每进行一次GC存活的对象很少, 现在将内存分为一块较大的Eden区域和两块较小的Survivor区域(From和To),每次都是用 Eden区域和一块From区域,当内存使用完之后,通过复制算法,将Eden和From中存活的对象复制到To区域中。然后From与To互换。
三、标记-整理
原理:
标记:遍历所有的 GC Roots, 然后标记所有可达对象为存活对象
整理:让存活对象向一端移动