天天看點

千鋒重慶Java學習之垃圾收集器有哪些?

Java虛拟機規範中對垃圾收集器應該如何實作并沒有任何規定,不同的版本和不同的收叢集可以針對不同的場景需要,最新的并不意味就是最好的,有時候在架構和業務層面考慮,可以根據需要進行配置。接下來介紹垃圾收集器的分類,方面你了解怎麼為項目選擇合适的垃圾收集器。想學習的同學,建議參加千鋒重慶java學習

1.串行垃圾收集器

串行垃圾收集器使用單個線程來執行所有垃圾收集工作,這使得它相對高效,因為線程之間沒有通信開銷。

它最适合于單處理器機器,因為它不能利用多處理器硬體,盡管它在多處理器上對具有小資料集的應用程式很有用。串行垃圾收集器在某些硬體和作業系統配置上預設選擇,或者可以使用選項-XX:+UseSerialGC顯式啟用。

串行GC将是不具有低暫停要求且在非常小的堆大小上工作的應用程式的最佳選擇。

2.并行垃圾收集器

并行垃圾收集器也稱為吞吐量收集器,是與串行垃圾收集器類似的分代收集器。串行垃圾收集器和并行收集器之間的主要差別在于并行收集器具有多個線程,用于加速垃圾收集。

并行垃圾收集器适用于具有在多處理器或多線程硬體上運作的中型到大型資料集的應用程式。您可以使用-XX:+UseParallelGC選項啟用它。

并行壓縮是一種使并行垃圾收集器能夠并行執行主要收集的功能。在沒有并行壓縮的情況下,主要收集是使用單個線程執行的,這會極大地限制可伸縮性。如果已指定選項-XX:+UseParallelGC,則預設情況下啟用并行壓縮。您可以使用-XX:-UseParallelOldGC選項禁用它。

并行垃圾收集器将是吞吐量比延遲更重要的最佳選擇。在可以接受長暫停的情況下,可以使用并行垃圾收集器,例如批量資料處理或批處理作業。

3.并發垃圾收集器

并發标記掃描(CMS)收集器和垃圾優先(G1)垃圾收集器是兩個主要并發的收集器。這些收集器與應用程式并行執行一些昂貴的工作,是以它們大多被稱為并發收集器。

CMS收集器

CMS收集器在需要低垃圾收集暫停的應用程式環境中是首選的,并且可以在應用程式運作時與垃圾收集器共享處理器資源。當應用程式中的長壽命世代較高時,或者在有兩個或多個處理器的機器上運作時,此收集器基本上提供了更多的好處。CMS收集器可以通過選項-XX:+UseConMarkSweepGC啟用。

CMS收集器在JDK 9中不再受歡迎,建議使用垃圾優先(G1)收集器。

G1垃圾收集器

G1是用于具有大量記憶體的多處理器機器的伺服器樣式收集器。它以很高的機率滿足垃圾收集暫停時間目标,同時在不需要配置的情況下實作高吞吐量。預設情況下,在某些硬體和作業系統配置上選擇G1,或者可以使用-XX:+UseG1GC顯式啟用G1。

G1主要通過疏散來回收空間:在要收集的標明記憶體區域中找到的活動對象被複制到新的記憶體區域,并在此過程中進行壓縮。疏散完成後,先前由活動對象占用的空間将被應用程式重新配置設定。

對于進階語言來講,因為不斷的建立對象,如果不清理,遲早記憶體會滿。是以需要清理不要的垃圾。了解這些垃圾收集器的特性有助于你為開發項目選擇合适的垃圾收集器,保障程式正常運作。

繼續閱讀