【427、Java gc算法了解哪些】

45 阅读2分钟

Java 的垃圾回收算法主要有以下几种:

  1. 标记-清除算法(Mark-Sweep)

标记-清除算法是一种最古老的垃圾回收算法,其基本思想是先标记出所有需要回收的对象,然后统一回收这些对象。但是标记清除算法存在两个问题:一是效率问题,因为标记和清除两个过程的效率都比较低;二是空间问题,标记清除算法会产生大量的内存碎片,导致大对象无法分配到连续的内存空间中。

  1. 复制算法(Copying)

复制算法将内存分为两个大小相等的区域,每次只使用其中一个区域。当这个区域被占满后,将存活的对象复制到另一个区域中,然后清空原来的区域。这种算法解决了标记清除算法中的空间碎片问题,但是需要两倍的内存空间。

  1. 标记-整理算法(Mark-Compact)

标记-整理算法是在标记清除算法的基础上进行的改进,它的基本思想是标记出所有需要回收的对象,然后将存活的对象向一端移动,然后将端边界以外的内存空间回收。这种算法解决了标记清除算法中的空间碎片问题,但是需要进行对象的移动,效率不高。

  1. 分代收集算法(Generational)

分代收集算法是根据对象的生命周期将堆空间分为几个不同的代,每个代使用不同的垃圾回收算法进行垃圾回收。一般来说,新创建的对象存放在新生代中,而较长生命周期的对象则存放在老年代中。这种算法可以根据不同代的特点,采用不同的回收策略,从而提高垃圾回收的效率。

  1. 并发标记清除算法(Concurrent Mark-Sweep)

并发标记清除算法是一种在程序运行的同时进行垃圾回收的算法。它的基本思想是在垃圾回收过程中,允许程序继续运行,垃圾回收线程只在需要标记对象时才停顿程序。这种算法对于响应时间要求比较高的系统比较适用。