- 垃圾收集算法
- a、标记-清除
先标示后清除。效率有限,会产生内存碎片化问题,不适合特别大的堆。
- b、复制算法
划分两块相同大小的区域,收集时将存货的对象复制到另一块区域。拷贝时将对象顺序放置,可以防止内存碎片化。但因多开辟一块内存区域,有一定浪费。
- c、标记-整理
类似标记-清除,为避免碎片化,清除过程中将对象移动,确保移动后的对象可以占用连续的内存空间。
分代收集
将内存划分为几个区域,不同区域采用合适的收集算法。
新对象分配到Eden,Minor GC监控到对象一定次数未被回收,将对象移动到老年代。
大对象直接进入老年代。(超过-XX:PretenureSizeThreshold 设置的值,默认为0)
- 垃圾收集器
- 按作用区域
作用于新生代:Serial、ParNew、Parallel Scavenge
作用于老年代:CMS、Serial Old、Parallel Old
同时作用于新生代和老年代:G1
- 按运行方式
串行收集器:Serial、Serial Old
并行收集器:ParNew、Parallel Scavenge、Parallel Old
并发收集器:CMS、G1
- 按应用场景
Serial、Serial Old:已弃用
Parallel:Server模式JVM的默认GC,吞吐量优先的垃圾收集器。
CMS:响应速度优先的收集器,经常需要ParNew的配合使用。
G1:兼顾吞吐量和响应时间,JDK9后默认G1,目标替换CMS。
- 按垃圾收集算法
Serial、Serial Old、Parallel、ParNew、G1 采用标记-整理算法
CMS 采用标记-清除算法