1. 程式人生 > 其它 >千鋒重慶Java學習之垃圾收集器有哪些?

千鋒重慶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主要通過疏散來回收空間:在要收集的選定記憶體區域中找到的活動物件被複制到新的記憶體區域,並在此過程中進行壓縮。疏散完成後,先前由活動物件佔用的空間將被應用程式重新分配。

對於高階語言來講,因為不斷的建立物件,如果不清理,遲早記憶體會滿。所以需要清理不要的垃圾。瞭解這些垃圾收集器的特性有助於你為開發專案選擇合適的垃圾收集器,保障程式正常執行。