JVM所有的垃圾回收器已整理完畢,請笑納!
Java 垃圾回收器(Garbage Collector,GC)是Java虛擬機(JVM)中的一個重要組件,無論是日常開發(fā),還是技術(shù)面試中,它都是一個非常重要的知識點。
那么,如何才能系統(tǒng)性地學(xué)習(xí) JVM垃圾回收器的相關(guān)知識呢?這篇文章,我們整理了過往所有關(guān)于 JVM回收器的文章,希望可以幫到你。
首先,讓我們從全局來了解下 JVM垃圾回收器的類型以及它們的特點,優(yōu)缺點和適用場景:
1. Serial Garbage Collector
- 特點: 使用單線程進(jìn)行垃圾回收。
- 適用場景: 適用于單處理器機器或小型應(yīng)用程序。
- 優(yōu)點: 實現(xiàn)簡單,開銷低。
- 缺點: 會導(dǎo)致較長的暫停時間,影響應(yīng)用程序性能。
2. Parallel Garbage Collector
- 特點: 使用多線程進(jìn)行垃圾回收。
- 適用場景: 適用于多處理器機器和需要高吞吐量的應(yīng)用程序。
- 優(yōu)點: 提高了垃圾回收的效率,減少了暫停時間。
- 缺點: 在垃圾回收期間,應(yīng)用程序仍然會暫停。
3. CMS (Concurrent Mark-Sweep) Garbage Collector
- 特點: 主要目標(biāo)是減少暫停時間,適用于需要低延遲的應(yīng)用。
- 適用場景: 適用于對響應(yīng)時間要求較高的應(yīng)用程序。
- 優(yōu)點: 大部分垃圾回收工作在與應(yīng)用程序并發(fā)進(jìn)行,減少了暫停時間。
- 缺點: 可能會產(chǎn)生內(nèi)存碎片,需要更多的CPU資源。
4. G1 (Garbage-First) Garbage Collector
- 特點: 設(shè)計用于處理大堆內(nèi)存,提供可預(yù)測的暫停時間。
- 適用場景: 適用于大內(nèi)存和需要可預(yù)測暫停時間的應(yīng)用程序。
- 優(yōu)點: 分區(qū)回收內(nèi)存,減少了長時間的暫停,適合大堆內(nèi)存。
- 缺點: 相比其他垃圾回收器,調(diào)優(yōu)復(fù)雜度較高。
5. ZGC (Z Garbage Collector)
- 特點: 設(shè)計目標(biāo)是處理大堆內(nèi)存,且暫停時間非常短(通常低于10毫秒)。
- 適用場景: 適用于超大內(nèi)存應(yīng)用和對暫停時間極為敏感的應(yīng)用。
- 優(yōu)點: 極低的暫停時間,可處理TB級別的堆內(nèi)存。
- 缺點: 目前還在不斷發(fā)展和優(yōu)化中,可能不如其他垃圾回收器穩(wěn)定。
6. Shenandoah Garbage Collector
- 特點: 類似于ZGC,目標(biāo)是提供低暫停時間。
- 適用場景: 適用于低延遲和大堆內(nèi)存的應(yīng)用。
- 優(yōu)點: 低暫停時間,適合大內(nèi)存應(yīng)用。
- 缺點: 需要更多的CPU資源,復(fù)雜度較高。
所有 JVM垃圾回收器對比如下圖:
最后,雖然 JVM垃圾回收器的知識很重要,但是它真的有點難,而且在日常開發(fā)中,很多小伙伴常年奮斗在CRUD業(yè)務(wù)上,很少和JVM直接打交道,因此,理解和掌握回收器的原理需要一個過程。