垃圾回收机制

某一个对象在未来的执行的时候不会再被用到

使用分代收集(generation collection),依照对象存活时间的长短使用不同的垃圾收集算法,以达到最好的收集性能。

以 Java 为例,由内存管理程序管理的堆可以切割成为两个部分:

  1. Young:
    1. Eden:存放新生对象。
    2. Survivor:存放经过垃圾回收没有被清除的对象。
    3. semi-Spaces:和 Survivor 做 Copying collection。
  2. Tenured:对象多次回收没有被清除,则移到该区块。

JVM 对不同的世代使用不同的 GC 算法。

  1. Minor collection:

    YOUNG 世代使用将 Eden 还有 Survivor 内的资料利用 semi-space 做复制收集(Copying collection),

    并将原本 Survivor 内经过多次垃圾收集仍然存活的对象移动到 Tenured。

  2. Major collection 则会进行 Minor collection,Tenured 世代则进行标记压缩收集。