垃圾回收机制
某一个对象在未来的执行的时候不会再被用到
使用分代收集(generation collection),依照对象存活时间的长短使用不同的垃圾收集算法,以达到最好的收集性能。
以 Java 为例,由内存管理程序管理的堆可以切割成为两个部分:
- Young:
- Eden:存放新生对象。
- Survivor:存放经过垃圾回收没有被清除的对象。
- semi-Spaces:和 Survivor 做 Copying collection。
- Tenured:对象多次回收没有被清除,则移到该区块。
JVM 对不同的世代使用不同的 GC 算法。
-
Minor collection:
YOUNG 世代使用将 Eden 还有 Survivor 内的资料利用 semi-space 做复制收集(Copying collection),
并将原本 Survivor 内经过多次垃圾收集仍然存活的对象移动到 Tenured。
-
Major collection 则会进行 Minor collection,Tenured 世代则进行标记压缩收集。