JVM-垃圾收集器

 

  1. 垃圾收集算法
  • a、标记-清除

先标示后清除。效率有限,会产生内存碎片化问题,不适合特别大的堆。

  • b、复制算法

划分两块相同大小的区域,收集时将存货的对象复制到另一块区域。拷贝时将对象顺序放置,可以防止内存碎片化。但因多开辟一块内存区域,有一定浪费。

  • c、标记-整理

类似标记-清除,为避免碎片化,清除过程中将对象移动,确保移动后的对象可以占用连续的内存空间。

分代收集

将内存划分为几个区域,不同区域采用合适的收集算法。

新对象分配到Eden,Minor GC监控到对象一定次数未被回收,将对象移动到老年代。

大对象直接进入老年代。(超过-XX:PretenureSizeThreshold 设置的值,默认为0)

  1. 垃圾收集器
  • 按作用区域

作用于新生代:Serial、ParNew、Parallel Scavenge

作用于老年代:CMS、Serial Old、Parallel Old

同时作用于新生代和老年代:G1

  • 按运行方式

串行收集器:SerialSerial Old

并行收集器:ParNew、Parallel Scavenge、Parallel Old

并发收集器:CMS、G1

  • 按应用场景

SerialSerial Old:已弃用

Parallel:Server模式JVM的默认GC,吞吐量优先的垃圾收集器。

CMS:响应速度优先的收集器,经常需要ParNew的配合使用。

G1:兼顾吞吐量和响应时间,JDK9后默认G1,目标替换CMS。

  • 按垃圾收集算法

SerialSerial Old、Parallel、ParNew、G1 采用标记-整理算法

CMS 采用标记-清除算法

上一篇:并发(Concurrent)与并行(Parallel)的区别


下一篇:面试官:说说虚拟机中的七大垃圾收集器吧!(上)