一、常見垃圾回收算法有:
- 引用計數法
- 標記清除法
- 標記壓縮法
- 複製算法
- 分代算法
根據回收對象的特點進行選擇,在JVM中年輕代適合使用複製算法,老年代適合使用標記清除或標記壓縮算法。
二、垃圾收集器以及內存分配
光有垃圾回收算法還是不夠,需要具體的實現。在JVM中,實現了多種垃圾收集器,如:
-
串行垃圾收集器
-
並行垃圾收集器
-
CMS(併發)垃圾收集器
CMS全稱Concurrent Mark Sweep是一款併發的,使用標記清除算法的垃圾回收期,該回收器是針對老年代垃圾回收的,通過參數-XX:+UseConcMarkSweepGC進行設置。JDK 8默認垃圾收集器。 -
G1垃圾收集器
在JDK 7中正式使用的全新垃圾收集器,在JDK 9中使用G1垃圾收集器替代CMS垃圾收集器。G1的設計原則就是簡化JVM性能調優,開發人員只需要簡單的三步即可完成調優:
- 開啓G1垃圾收集器
- 設置堆的最大內存
- 設置最大的停頓時間
G1中提供了三種垃圾回收模式,Young GC、Mixed GC、Full GC,在不同的條件下被觸發。