
Java虛擬機規范中對垃圾收集器應該如何實現并沒有任何規定,不同的版本和不同的收集群可以針對不同的場景需要,最新的并不意味就是最好的,有時候在架構和業務層面考慮,可以根據需要進行配置。接下來介紹垃圾收集器的分類,方便你了解怎么為項目選擇合適的垃圾收集器。
1.串行垃圾收集器
串行垃圾收集器使用單個線程來執行所有垃圾收集工作,這使得它相對高效,因為線程之間沒有通信開銷。它最適合于單處理器機器,因為它不能利用多處理器硬件,盡管它在多處理器上對具有小數據集的應用程序很有用。
串行垃圾收集器在某些硬件和操作系統配置上默認選擇,或者可以使用選項-XX:+UseSerialGC顯式啟用。串行GC將是不具有低暫停要求且在非常小的堆大小上工作的應用程序的最佳選擇。
2.并行垃圾收集器
并行垃圾收集器也稱為吞吐量收集器,是與串行垃圾收集器類似的分代收集器。串行垃圾收集器和并行收集器之間的主要區別在于并行收集器具有多個線程,用于加速垃圾收集。并行垃圾收集器適用于具有在多處理器或多線程硬件上運行的中型到大型數據集的應用程序。您可以使用-XX:+UseParallelGC選項啟用它。
并行壓縮是一種使并行垃圾收集器能夠并行執行主要收集的功能。在沒有并行壓縮的情況下,主要收集是使用單個線程執行的,這會極大地限制可伸縮性。如果已指定選項-XX:+UseParallelGC,則默認情況下啟用并行壓縮。您可以使用-XX:-UseParallelOldGC選項禁用它。并行垃圾收集器將是吞吐量比延遲更重要的最佳選擇。在可以接受長暫停的情況下,可以使用并行垃圾收集器,例如批量數據處理或批處理作業。
3.并發垃圾收集器
并發標記掃描(CMS)收集器和垃圾優先(G1)垃圾收集器是兩個主要并發的收集器。這些收集器與應用程序并行執行一些昂貴的工作,因此它們大多被稱為并發收集器。
4.CMS收集器
CMS收集器在需要低垃圾收集暫停的應用程序環境中是首選的,并且可以在應用程序運行時與垃圾收集器共享處理器資源。當應用程序中的長壽命世代較高時,或者在有兩個或多個處理器的機器上運行時,此收集器基本上提供了更多的好處。CMS收集器可以通過選項-XX:+UseConMarkSweepGC啟用。CMS收集器在JDK 9中不再受歡迎,建議使用垃圾優先(G1)收集器。
5.G1垃圾收集器
G1是用于具有大量內存的多處理器機器的服務器樣式收集器。它以很高的概率滿足垃圾收集暫停時間目標,同時在不需要配置的情況下實現高吞吐量。默認情況下,在某些硬件和操作系統配置上選擇G1,或者可以使用-XX:+UseG1GC顯式啟用G1。G1主要通過疏散來回收空間:在要收集的選定內存區域中找到的活動對象被復制到新的內存區域,并在此過程中進行壓縮。疏散完成后,先前由活動對象占用的空間將被應用程序重新分配。
對于高級語言來講,因為不斷的創建對象,如果不清理,遲早內存會滿。所以需要清理不要的垃圾。了解這些垃圾收集器的特性有助于你為開發項目選擇合適的垃圾收集器,保障程序正常運行。
本文由培訓無憂網牛耳教育專屬課程顧問整理發布,更多Java培訓課程資訊歡迎關注培訓無憂網Java培訓頻道或添加老師微信:1503333605010
注:尊重原創文章,轉載請注明出處和鏈接 http://www.dedgn.cn/news-id-9994.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注java培訓頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050