一区二区三区中文国产亚洲_另类视频区第一页_日韩精品免费视频_女人免费视频_国产综合精品久久亚洲

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > Java培訓(xùn):垃圾收集器——串行與并行、CMS與G1

Java培訓(xùn):垃圾收集器——串行與并行、CMS與G1

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-12-10 00:42:31 1702140151

眾所周知,垃圾收集是影響性能的事情之一,所以我們應(yīng)該努力學(xué)習(xí)GC的基本知識,特別是因為Java8在這一領(lǐng)域做了一些重大的更改和改進,尤其是隨著PermGen的刪除和一些新的令人興奮的優(yōu)化。通過參加java培訓(xùn),學(xué)習(xí)最新java技能,可以讓你的實力一直保持領(lǐng)先水平,提升行業(yè)競爭力。

當(dāng)我們談?wù)摾占瘯r,絕大多數(shù)人都知道這個概念,并在日常編程中使用它。即便如此,我們還是有很多不理解的地方。關(guān)于JVM最大的誤解之一是它有一個垃圾收集器,實際上它提供了四個不同的垃圾收集器,每個垃圾收集器都有自己獨特的優(yōu)點和缺點。選擇使用哪一個是由你自己決定的,吞吐量和應(yīng)用程序暫停之間的差異可能是巨大的。

這四種垃圾收集算法的共同點是,它們是分代的,這意味著它們將托管堆劃分為不同的部分,使用了一種古老的假設(shè),即堆中的大多數(shù)對象都是短暫的,應(yīng)該快速回收。

1.串行收集器

串行收集器是最簡單的,也是你可能不會使用的,因為它主要是為單線程環(huán)境(例如32位或Windows)和小堆設(shè)計的。這個收集器在工作時會凍結(jié)所有應(yīng)用程序線程,這使得它在任何情況下都不能在服務(wù)器環(huán)境中使用。在java培訓(xùn)中,有很多關(guān)于Java開發(fā)工具、庫和框架的培訓(xùn)課程,在專業(yè)老師的教學(xué)指導(dǎo)下,可以很全面地掌握相關(guān)知識和技能。

如何使用它:你可以通過打開-XX:+UseSerialGCJVM參數(shù)來使用它

2.并行/吞吐量收集器

接下來是并行收集器。這是JVM的默認收集器。就像它的名字一樣,它最大的優(yōu)點是使用多個線程來掃描和壓縮堆。并行收集器的缺點是,當(dāng)執(zhí)行次要或完整GC收集時,它將停止應(yīng)用程序線程。并行收集器最適合那些可以容忍應(yīng)用程序暫停并試圖優(yōu)化收集器導(dǎo)致的較低CPU開銷的應(yīng)用程序。

3.CMS收集器

并行收集器的后續(xù)是CMS收集器(“并發(fā)標(biāo)記掃描”)。該算法使用多個線程(“并發(fā)”)在堆中掃描(“標(biāo)記”)可回收的未使用對象(“掃描”)。在兩種情況下,該算法將進入“停止世界”(STW)模式:當(dāng)初始化根(舊一代中可以從線程入口點或靜態(tài)變量訪問的對象)的初始標(biāo)記時,以及當(dāng)應(yīng)用程序在算法同時運行時更改了堆的狀態(tài)時,迫使它返回并做一些最后的潤色,以確保它標(biāo)記了正確的對象。對Java感興趣的同學(xué)可以參加java培訓(xùn),可以獲得快速有效的學(xué)習(xí)。

使用此收集器時,最大的問題是遇到升級失敗,即在收集年輕一代和老年一代之間發(fā)生競爭的情況。如果收集器需要將年輕的對象提升到舊一代,但沒有足夠的時間騰出空間來清除它,它將不得不首先這樣做,這將導(dǎo)致完整的STW收集——這正是CMS收集器想要防止的事情。為了確保這種情況不會發(fā)生,你可以增加舊一代的大小(或者整個堆的大小),或者為收集器分配更多的后臺線程,讓他與對象分配的速率競爭。

與并行收集器相比,該算法的另一個缺點是,它使用更多的CPU,通過使用多個線程執(zhí)行掃描和收集,為應(yīng)用程序提供更高級別的連續(xù)吞吐量。對于大多數(shù)不利于應(yīng)用程序凍結(jié)的長期運行的服務(wù)器應(yīng)用程序,這通常是一個很好的權(quán)衡。即便如此,該算法在默認情況下也不會啟用。你必須指定XX:+USeParNewGC才能真正啟用它。如果你愿意分配更多的CPU資源來避免應(yīng)用程序暫停,假設(shè)你的堆大小小于4Gb,這就是你可能想要使用的收集器。然而,如果它大于4GB,你可能會想使用最后一種算法——G1收集器。想學(xué)習(xí)java技術(shù)的同學(xué),不妨報個Java培訓(xùn)班,有明確清晰的學(xué)習(xí)路線,理論知識+實戰(zhàn)操作,可以獲得快速提升。

4.G1收集器

JDK7更新4中引入的垃圾優(yōu)先收集器(G1)旨在更好地支持大于4GB的堆。G1收集器利用多個后臺線程來掃描它劃分為區(qū)域的堆,范圍從1MB到32MB(取決于堆的大小)。G1收集器旨在首先掃描那些包含最多垃圾對象的區(qū)域,并將其命名為(垃圾優(yōu)先)。此收集器是使用–XX:+UseG1GC標(biāo)志打開的。

此策略降低了在后臺線程完成對未使用對象的掃描之前堆被耗盡的可能性,在這種情況下,收集器將不得不停止應(yīng)用程序,這將導(dǎo)致STW收集。G1還有另一個優(yōu)點,那就是它在移動中壓縮了堆,而CMS收集器只在完整的STW收集過程中才這樣做。在java培訓(xùn)中,不僅有理論知識的課程,還有大量實戰(zhàn)項目學(xué)習(xí),讓你在實踐中真正掌握Java知識和技能。

在過去的幾年里,大型堆一直是一個相當(dāng)有爭議的領(lǐng)域,許多開發(fā)人員從每臺機器的單個JVM模型轉(zhuǎn)向每臺機器有多個JVM的更微服務(wù)、組件化的架構(gòu)。這是由許多因素驅(qū)動的,包括希望隔離不同的應(yīng)用程序部分,簡化部署,避免將應(yīng)用程序類重新加載到內(nèi)存中通常會帶來的成本(這在Java8中實際上得到了改進)。

即便如此,在JVM中,這樣做的最大驅(qū)動因素之一源于避免大型堆中出現(xiàn)的長時間“停止世界”暫停(在大型集合中可能需要幾秒鐘)的愿望。Docker等容器技術(shù)也加速了這一進程,使你能夠相對輕松地在同一物理機器上部署多個應(yīng)用程序。

總結(jié)

這些收集器中的每一個都通過一系列切換和開關(guān)進行了不同的配置和調(diào)整,每個都有可能增加或減少吞吐量,所有這些都基于你的應(yīng)用程序的特定行為。參加java培訓(xùn)是入門學(xué)習(xí)的最佳選擇,有經(jīng)驗豐富的專業(yè)老師面授指導(dǎo)教學(xué),通過理論結(jié)合實戰(zhàn)的方式教授java基礎(chǔ)知識,幫助你更好的理解與運用java。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
嵌入式培訓(xùn)課程:探索技術(shù)的無限可能

近年來,嵌入式系統(tǒng)的廣泛應(yīng)用已經(jīng)深刻改變了我們的生活方式。從智能手機到智能家居,從汽車到醫(yī)療設(shè)備,嵌入式技術(shù)已經(jīng)成為現(xiàn)代社會不可或缺的...詳情>>

2023-12-12 11:02:35
嵌入式開發(fā):Linux網(wǎng)絡(luò)編程的探索與實踐

在當(dāng)今的科技世界中,嵌入式系統(tǒng)已經(jīng)滲透到我們生活的方方面面,從智能手機、電視、汽車到醫(yī)療設(shè)備等。而在這些設(shè)備中,Linux網(wǎng)絡(luò)編程扮演著至...詳情>>

2023-12-12 09:55:55
Java游戲項目開發(fā):技術(shù)概覽與實踐

在數(shù)字化世界中,游戲已經(jīng)成為了人們休閑娛樂的重要方式之一。隨著科技的不斷進步,游戲開發(fā)行業(yè)也在不斷發(fā)展,而Java作為一門廣泛使用的編程語...詳情>>

2023-12-12 08:49:15
Web前端的基石:HTML

在數(shù)字化的時代,網(wǎng)頁設(shè)計已經(jīng)成為了一個重要的領(lǐng)域。而在這個領(lǐng)域中,HTML(HyperTextMarkupLanguage)無疑是最基礎(chǔ)、最重要的一環(huán)。它是構(gòu)建...詳情>>

2023-12-12 08:15:55
嵌入式開發(fā):內(nèi)存分配的方式

嵌入式系統(tǒng)開發(fā)中,內(nèi)存分配是一個至關(guān)重要的話題。嵌入式系統(tǒng)通常具有有限的內(nèi)存資源,因此合理的內(nèi)存分配方式對系統(tǒng)的性能和穩(wěn)定性至關(guān)重要。...詳情>>

2023-12-12 06:35:55
快速通道