Java虛擬機(jī)規(guī)范中對(duì)垃圾收集器應(yīng)該如何實(shí)現(xiàn)并沒(méi)有任何規(guī)定,不同的版本和不同的收集群可以針對(duì)不同的場(chǎng)景需要,最新的并不意味就是最好的,有時(shí)候在架構(gòu)和業(yè)務(wù)層面考慮,可以根據(jù)需要進(jìn)行配置。接下來(lái)介紹垃圾收集器的分類,方面你了解怎么為項(xiàng)目選擇合適的垃圾收集器。想學(xué)習(xí)的同學(xué),建議參加java培訓(xùn),在專業(yè)老師和系統(tǒng)課程的帶領(lǐng)學(xué)習(xí)下,很快就能掌握了這部分的知識(shí)和技能。
1.串行垃圾收集器
串行垃圾收集器使用單個(gè)線程來(lái)執(zhí)行所有垃圾收集工作,這使得它相對(duì)高效,因?yàn)榫€程之間沒(méi)有通信開(kāi)銷(xiāo)。
它最適合于單處理器機(jī)器,因?yàn)樗荒芾枚嗵幚砥饔布?,盡管它在多處理器上對(duì)具有小數(shù)據(jù)集的應(yīng)用程序很有用。串行垃圾收集器在某些硬件和操作系統(tǒng)配置上默認(rèn)選擇,或者可以使用選項(xiàng)-XX:+UseSerialGC顯式啟用。
串行GC將是不具有低暫停要求且在非常小的堆大小上工作的應(yīng)用程序的最佳選擇。
2.并行垃圾收集器
并行垃圾收集器也稱為吞吐量收集器,是與串行垃圾收集器類似的分代收集器。串行垃圾收集器和并行收集器之間的主要區(qū)別在于并行收集器具有多個(gè)線程,用于加速垃圾收集。
并行垃圾收集器適用于具有在多處理器或多線程硬件上運(yùn)行的中型到大型數(shù)據(jù)集的應(yīng)用程序。您可以使用-XX:+UseParallelGC選項(xiàng)啟用它。在java培訓(xùn)中,會(huì)有關(guān)于垃圾收集器的相關(guān)知識(shí)的講解,感興趣的同學(xué)可以報(bào)名學(xué)習(xí)了解一下。
并行壓縮是一種使并行垃圾收集器能夠并行執(zhí)行主要收集的功能。在沒(méi)有并行壓縮的情況下,主要收集是使用單個(gè)線程執(zhí)行的,這會(huì)極大地限制可伸縮性。如果已指定選項(xiàng)-XX:+UseParallelGC,則默認(rèn)情況下啟用并行壓縮。您可以使用-XX:-UseParallelOldGC選項(xiàng)禁用它。
并行垃圾收集器將是吞吐量比延遲更重要的最佳選擇。在可以接受長(zhǎng)暫停的情況下,可以使用并行垃圾收集器,例如批量數(shù)據(jù)處理或批處理作業(yè)。
3.并發(fā)垃圾收集器
并發(fā)標(biāo)記掃描(CMS)收集器和垃圾優(yōu)先(G1)垃圾收集器是兩個(gè)主要并發(fā)的收集器。這些收集器與應(yīng)用程序并行執(zhí)行一些昂貴的工作,因此它們大多被稱為并發(fā)收集器。
CMS收集器
CMS收集器在需要低垃圾收集暫停的應(yīng)用程序環(huán)境中是首選的,并且可以在應(yīng)用程序運(yùn)行時(shí)與垃圾收集器共享處理器資源。當(dāng)應(yīng)用程序中的長(zhǎng)壽命世代較高時(shí),或者在有兩個(gè)或多個(gè)處理器的機(jī)器上運(yùn)行時(shí),此收集器基本上提供了更多的好處。CMS收集器可以通過(guò)選項(xiàng)-XX:+UseConMarkSweepGC啟用。參加java培訓(xùn),可以學(xué)到全方位的java知識(shí)和技能,而且還有實(shí)戰(zhàn)項(xiàng)目操作訓(xùn)練,積累項(xiàng)目經(jīng)驗(yàn),以便快速上崗。
CMS收集器在JDK 9中不再受歡迎,建議使用垃圾優(yōu)先(G1)收集器。
G1垃圾收集器
G1是用于具有大量?jī)?nèi)存的多處理器機(jī)器的服務(wù)器樣式收集器。它以很高的概率滿足垃圾收集暫停時(shí)間目標(biāo),同時(shí)在不需要配置的情況下實(shí)現(xiàn)高吞吐量。默認(rèn)情況下,在某些硬件和操作系統(tǒng)配置上選擇G1,或者可以使用-XX:+UseG1GC顯式啟用G1。
G1主要通過(guò)疏散來(lái)回收空間:在要收集的選定內(nèi)存區(qū)域中找到的活動(dòng)對(duì)象被復(fù)制到新的內(nèi)存區(qū)域,并在此過(guò)程中進(jìn)行壓縮。疏散完成后,先前由活動(dòng)對(duì)象占用的空間將被應(yīng)用程序重新分配。
對(duì)于高級(jí)語(yǔ)言來(lái)講,因?yàn)椴粩嗟膭?chuàng)建對(duì)象,如果不清理,遲早內(nèi)存會(huì)滿。所以需要清理不要的垃圾。了解這些垃圾收集器的特性有助于你為開(kāi)發(fā)項(xiàng)目選擇合適的垃圾收集器,保障程序正常運(yùn)行。想學(xué)習(xí)這方面內(nèi)容的同學(xué),可以報(bào)名參加java培訓(xùn),可以獲得快速提升。