说一下 JVM 有哪些垃圾回收算法?

194 阅读1分钟
  • 标记清除:标记无用内存,进行回收。缺点:效率不高,会有内存碎片
  • 标记复制:内存分为两块大小相等的区域,当一块用完时将活着的对象复制到另一块,清除源内存。缺点:内存使用率不高
  • 标记整理:标记无用内存,同时将活着的对象移到一起,清除无用内存。
  • 分代算法:将堆划分为新生代,老年代。新生代采用标记复制算法,老年代采用标记整理算法

标记清除

优点

实现简单,不需要进行对象移动

缺点

标记、清除效率低,产生内存碎片,需要频繁垃圾回收

标记复制

为了解决标记清除算法的缺点,产生了标记复制算法

优点

实现简单(不需要对象移动),运行效率高,不会有内存碎片

缺点

内存使用率低,对象存活率高时会频繁复制

标记整理

老年代的对象存活率高,故不能用标记复制算法

优点

没有标记清除算法的内存碎片问题。

缺点

需要对象移动,效率不高

分代收集器算法

分为新生代,老年代,元空间