1. gzyueqian
      13352868059

      Java培訓(xùn):Java虛擬機(jī)中垃圾收集器的類(lèi)型

      更新時(shí)間: 2022-11-01 16:31:26來(lái)源: 粵嵌教育瀏覽量:8158

        垃圾收集提高了Java內(nèi)存的效率,因?yàn)樗鼜亩褍?nèi)存中移除了未被引用的對(duì)象,并為新對(duì)象釋放了空間。Java虛擬機(jī)有八種類(lèi)型的垃圾收集器。讓我們?cè)敿?xì)看看每一個(gè)。想學(xué)習(xí)java垃圾收集技術(shù),建議考慮報(bào)名參加Java培訓(xùn),有明確的學(xué)習(xí)路線和全面系統(tǒng)的課程,能獲得較快提升。

        串行GC

        這是GC最簡(jiǎn)單的實(shí)現(xiàn),是為運(yùn)行在單線程環(huán)境中的小型應(yīng)用程序設(shè)計(jì)的。所有垃圾收集事件都在一個(gè)線程中連續(xù)進(jìn)行。壓縮在每次垃圾收集后執(zhí)行。

        當(dāng)它運(yùn)行時(shí),它會(huì)導(dǎo)致“stop the world”事件,整個(gè)應(yīng)用程序都會(huì)暫停。由于整個(gè)應(yīng)用程序在垃圾收集過(guò)程中被凍結(jié),因此在需要低延遲的實(shí)際場(chǎng)景中不建議這樣做。

        使用串行垃圾收集器的JVM參數(shù)是-XX:+UseSerialGC。

        并行GC

        并行收集器適用于在多處理器或多線程硬件上運(yùn)行的中大型數(shù)據(jù)集的應(yīng)用程序。這是JVM中GC的默認(rèn)實(shí)現(xiàn),也稱(chēng)為吞吐量收集器。

        在年輕一代中,多線程用于較小的垃圾收集。在老一代中,單個(gè)線程用于主要的垃圾收集。在java培訓(xùn)中,有理論知識(shí)+實(shí)踐項(xiàng)目,雙管齊下,學(xué)以致用,讓你深入淺出地學(xué)習(xí)java。

        運(yùn)行并行GC還會(huì)導(dǎo)致“stop the world event”和應(yīng)用程序凍結(jié)。因?yàn)樗m合多線程環(huán)境,所以可以在需要完成大量工作并且可以接受長(zhǎng)時(shí)間暫停的情況下使用,例如運(yùn)行批處理作業(yè)。

        使用并行垃圾收集器的JVM參數(shù)是-XX:+UseParallelGC.

        并行舊GC

        這是自Java 7u4以來(lái)的并行GC的默認(rèn)版本。它與并行GC相同,只是它為年輕一代和老一代使用多線程。

        使用并行垃圾收集器的JVM參數(shù)是-XX:+UseParallelOldGC。

        

        CMS(并發(fā)標(biāo)記掃描)GC

        這也稱(chēng)為并發(fā)低暫停收集器。多個(gè)線程使用與Parallel相同的算法進(jìn)行次要垃圾收集。主要垃圾收集是多線程的,就像并行舊GC一樣,但CMS與應(yīng)用程序進(jìn)程并行運(yùn)行,以最小化“stop the world”事件。通過(guò)java培訓(xùn),你可以學(xué)習(xí)更多java垃圾收集技巧,以提高java技能。

        因此,CMS收集器比其他GC使用更多的CPU。如果你可以為更好的性能分配更多的CPU,那么CMS垃圾收集器比并行收集器是更好的選擇。CMS GC中不執(zhí)行壓縮。

        使用并發(fā)標(biāo)記掃描垃圾收集器的JVM參數(shù)是-XX:+UseConcMarkSweepGC。

        G1(垃圾優(yōu)先)GC

        G1GC旨在取代CMS,并設(shè)計(jì)用于具有大堆大小(大于4GB)的多線程應(yīng)用程序。它與CMS一樣是并行和并發(fā)的,但與老的垃圾收集器相比,它的工作原理完全不同。

        雖然G1也是一代的,但它并沒(méi)有為年輕一代和年老一代分開(kāi)的區(qū)域。相反,每一代都是一組區(qū)域,這允許以靈活的方式調(diào)整年輕一代的大小。

        它將堆劃分為一組大小相等的區(qū)域(1MB到32MB,取決于堆的大小),并使用多個(gè)線程掃描它們。在程序運(yùn)行期間的任何時(shí)候,區(qū)域可能是舊區(qū)域或新區(qū)域。想要學(xué)習(xí)java更多知識(shí)和技能,可以考慮參加java培訓(xùn),有經(jīng)驗(yàn)豐富的專(zhuān)業(yè)講師指導(dǎo)教學(xué),有緊跟市場(chǎng)需求的實(shí)時(shí)課程,可以讓你快速掌握這門(mén)技術(shù),節(jié)約時(shí)間,少走彎路。

        在標(biāo)記階段完成后,G1知道哪些區(qū)域包含最多的垃圾對(duì)象。如果用戶對(duì)最短的暫停時(shí)間感興趣,G1可以選擇只疏散幾個(gè)地區(qū)。如果用戶不擔(dān)心暫停時(shí)間或者已經(jīng)陳述了一個(gè)相當(dāng)大的暫停時(shí)間目標(biāo),G1可能會(huì)選擇包含更多的區(qū)域。

        因?yàn)镚1GC會(huì)識(shí)別垃圾最多的區(qū)域,并首先對(duì)該區(qū)域執(zhí)行垃圾收集,所以它被稱(chēng)為垃圾優(yōu)先。

        除了Eden、Survivor和Old memory區(qū)域,G1GC中還有兩種類(lèi)型的區(qū)域:

        l Humongous—用于大型對(duì)象(大于堆大小的50%)

        l Available—未使用或未分配的空間

        使用G1垃圾收集器的JVM參數(shù)是-XX:+UseG1GC。

        Epsilon垃圾收集器

        Epsilon是一個(gè)什么都不做(no-op)的垃圾收集器,作為JDK 11的一部分發(fā)布。它處理內(nèi)存分配,但不實(shí)現(xiàn)任何實(shí)際的內(nèi)存回收機(jī)制。一旦可用的Java堆耗盡,JVM就會(huì)關(guān)閉。想學(xué)習(xí)垃圾收集器技術(shù)的同學(xué),建議參加java培訓(xùn),在專(zhuān)業(yè)老師和系統(tǒng)課程的帶領(lǐng)學(xué)習(xí)下,很快就能掌握了這部分的知識(shí)和技能。

        它可以用于對(duì)延遲極其敏感的應(yīng)用程序,在這些應(yīng)用程序中,開(kāi)發(fā)人員確切地知道應(yīng)用程序的內(nèi)存占用,甚至擁有(幾乎)完全無(wú)垃圾的應(yīng)用程序。否則,不鼓勵(lì)在任何其他情況下使用Epsilon GC。

        使用Epsilon垃圾收集器的JVM參數(shù)是-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC.

        

        Shenandoah

        Shenandoah是作為JDK 12的一部分發(fā)布的一個(gè)新GC。Shenandeah相對(duì)于G1的主要優(yōu)勢(shì)在于,它與應(yīng)用程序線程同時(shí)執(zhí)行更多的垃圾收集循環(huán)工作。G1只能在應(yīng)用程序暫停時(shí)清空其堆區(qū)域,而Shenandoah可以在應(yīng)用程序同時(shí)重新定位對(duì)象。

        Shenandoah可以壓縮活動(dòng)對(duì)象,清理垃圾,并在檢測(cè)到空閑內(nèi)存后立即將RAM釋放回操作系統(tǒng)。由于所有這些都是在應(yīng)用程序運(yùn)行時(shí)同時(shí)發(fā)生的,所以Shenandoah更加占用CPU資源。參加java培訓(xùn),可以學(xué)到全方位的java知識(shí)和技能,而且還有實(shí)戰(zhàn)項(xiàng)目操作訓(xùn)練,積累項(xiàng)目經(jīng)驗(yàn),以便快速上崗。

        使用Epsilon垃圾收集器的JVM參數(shù)是-XX:+UnlockExperimentalVMOptions-XX:+UseShenandoahGC。

        ZGC

        ZGC是作為JDK 11的一部分發(fā)布的另一個(gè)GC,并在JDK 12中進(jìn)行了改進(jìn)。它適用于需要低延遲(小于10ms暫停)和/或使用非常大的堆(TB)的應(yīng)用程序。

        ZGC的主要目標(biāo)是低延遲、可擴(kuò)展性和易用性。為此,ZGC允許Java應(yīng)用程序在執(zhí)行所有垃圾收集操作時(shí)繼續(xù)運(yùn)行。默認(rèn)情況下,ZGC取消提交未使用的內(nèi)存并將其返回給操作系統(tǒng)。

        因此,ZGC通過(guò)提供極低的暫停時(shí)間(通常在2ms內(nèi)),比其他傳統(tǒng)GC帶來(lái)了顯著的改進(jìn)。

        使用Epsilon垃圾收集器的JVM參數(shù)是-XX:+UnlockExperimentalVMOptions -XX:+UseZGC。在java培訓(xùn)中,也有關(guān)于內(nèi)存管理和垃圾回收的相關(guān)課程,學(xué)好這些技能和知識(shí),保障程序穩(wěn)定運(yùn)行。

        垃圾收集的優(yōu)勢(shì)

        Java中的垃圾收集有很多好處。

        首先,它使你的代碼變得簡(jiǎn)單。你不必?fù)?dān)心適當(dāng)?shù)膬?nèi)存分配和釋放周期。你只需在代碼中停止使用某個(gè)對(duì)象,它所使用的內(nèi)存就會(huì)在某個(gè)時(shí)候被自動(dòng)回收。

        使用沒(méi)有垃圾收集的語(yǔ)言(如C和C++)的程序員必須在他們的代碼中實(shí)現(xiàn)手動(dòng)內(nèi)存管理。

        它還使Java內(nèi)存高效,因?yàn)槔占鲝亩褍?nèi)存中移除未引用的對(duì)象。這將釋放堆內(nèi)存來(lái)容納新對(duì)象。

        雖然一些程序員認(rèn)為手動(dòng)內(nèi)存管理優(yōu)于垃圾收集,但垃圾收集現(xiàn)在是許多流行編程語(yǔ)言的標(biāo)準(zhǔn)組件。

        對(duì)于垃圾收集器對(duì)性能產(chǎn)生負(fù)面影響的場(chǎng)景,Java提供了許多選項(xiàng)來(lái)調(diào)優(yōu)垃圾收集器,以提高其效率。參加java培訓(xùn),在短時(shí)間內(nèi)盡快掌握垃圾收集器的相關(guān)知識(shí),有助于你更好地進(jìn)行開(kāi)發(fā)工作。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩精品视频网站 | 亚洲午夜久久久久中文字幕久 | 日本免费中文在线视频播放 | 亚洲精品资源久久 | 女同精品久久国产字幕 | 亚洲国产福利小电影 |