黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 7種Java垃圾回收器

7種Java垃圾回收器

更新時(shí)間:2022-09-05 10:34:01 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3715次

本文檔將解釋什么是 java 中的垃圾收集器以及主要的垃圾收集器類型以及每個(gè)垃圾收集器的行為。

Java 是一種面向?qū)ο蟮木幊陶Z(yǔ)言,包括Automatic Garbage Collection。Java 會(huì)自動(dòng)分配和取消分配內(nèi)存,因此程序不會(huì)承擔(dān)該任務(wù)。現(xiàn)在(Java-12),Java 有七種類型的垃圾收集器。

1.串行垃圾收集器

這是最簡(jiǎn)單的 GC 實(shí)現(xiàn)。它基本上是為單線程環(huán)境設(shè)計(jì)的。此GC垃圾回收實(shí)現(xiàn)在運(yùn)行時(shí)凍結(jié)所有應(yīng)用程序線程。它使用單線程進(jìn)行垃圾收集。因此,在服務(wù)器環(huán)境等多線程應(yīng)用程序中使用它并不是一個(gè)好主意。

要啟用串行垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseSerialGC -jar Application.java

2.并行垃圾收集器

并行垃圾收集器也稱為吞吐量收集器。與串行垃圾收集器不同,它使用多個(gè)線程進(jìn)行垃圾收集。與串行垃圾收集器類似,這也會(huì)在執(zhí)行垃圾收集時(shí)凍結(jié)所有應(yīng)用程序線程。垃圾收集器最適合那些可以承受應(yīng)用程序暫停的應(yīng)用程序。

要啟用并行垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseParallelGC -jar Application.java

如果我們使用這個(gè)GC,我們可以指定最大垃圾收集線程和暫停時(shí)間、吞吐量和占用空間(堆大小)

可以使用命令行選項(xiàng)控制垃圾收集器線程的數(shù)量

-XX: ParallelGCThreads=<N>

使用命令行選項(xiàng)指定最大暫停時(shí)間目標(biāo)(兩次GC之間的間隔 [以毫秒為單位] )

-XX: MaxGCPauseMillis=<N>

最大吞吐量目標(biāo)(根據(jù)執(zhí)行垃圾收集所花費(fèi)的時(shí)間與在垃圾收集之外花費(fèi)的時(shí)間來(lái)衡量)由命令行選項(xiàng)指定

-XX:GCTimeRatio=<N>

使用選項(xiàng)-Xmx <N>指定最大堆占用空間(程序運(yùn)行時(shí)所需的堆內(nèi)存量)。

3. CMS 垃圾收集器

并發(fā)標(biāo)記掃描 (CMS) 垃圾收集器使用多個(gè)垃圾收集器線程進(jìn)行垃圾收集。它掃描堆內(nèi)存以標(biāo)記要驅(qū)逐的實(shí)例,然后掃描標(biāo)記的實(shí)例。它專為喜歡更短的垃圾收集暫停的應(yīng)用程序而設(shè)計(jì),并且可以在應(yīng)用程序運(yùn)行時(shí)與垃圾收集器共享處理器資源。

CMS 垃圾收集器僅在以下兩種情況下持有所有應(yīng)用程序線程

在標(biāo)記老年代空間中的引用對(duì)象期間。

堆內(nèi)存的任何變化與垃圾回收并行

與并行垃圾收集器相比,CMS 收集器使用更多的 CPU 來(lái)確保更好的應(yīng)用程序吞吐量。如果我們可以分配更多的 CPU 以獲得更好的性能,那么 CMS 垃圾收集器是優(yōu)于并行收集器的首選。

要啟用 CMS 垃圾收集器,我們可以使用以下參數(shù):

java -XX:+USeParNewGC -jar Application.java

4. G1 垃圾收集器

G1(垃圾優(yōu)先)垃圾收集器專為在具有大內(nèi)存空間的多處理器機(jī)器上運(yùn)行的應(yīng)用程序而設(shè)計(jì)。它從JDK7 Update 4和更高版本開(kāi)始可用。

它將堆內(nèi)存分成多個(gè)區(qū)域,并在其中并行收集。G1 也會(huì)在回收內(nèi)存后立即壓縮空閑堆空間。但是 CMS 垃圾收集器會(huì)在停止世界 (STW) 情況下壓縮內(nèi)存。G1收集器將取代CMS收集器,因?yàn)樗咝А?/p>

在 G1 中收集器包含兩個(gè)階段;

打標(biāo)

掃地

與其他收集器不同,G1收集器將堆劃分為一組大小相等的堆區(qū)域,每個(gè)區(qū)域都是連續(xù)的虛擬內(nèi)存范圍。在執(zhí)行垃圾回收時(shí),G1顯示了一個(gè)并發(fā)的全局標(biāo)記階段,以確定整個(gè)堆中對(duì)象的活躍度。

標(biāo)記階段完成后,G1知道哪些區(qū)域大部分是空的。它首先在這些區(qū)域收集,這通常會(huì)產(chǎn)生大量可用空間。這就是為什么這種垃圾收集方法被稱為 Garbage-First 的原因。

要啟用 G1 垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseG1GC -jar Application.java

5. Epsilon 垃圾收集器

Epsilon 是一個(gè)不可操作的或被動(dòng)的垃圾收集器。它為應(yīng)用程序分配內(nèi)存,但不收集未使用的對(duì)象。當(dāng)應(yīng)用程序耗盡 Java 堆時(shí),JVM 將關(guān)閉。這意味著 Epsilon 垃圾收集器允許應(yīng)用程序耗盡內(nèi)存并崩潰。

此垃圾收集器的目的是測(cè)量和管理應(yīng)用程序性能?;顒?dòng)垃圾收集器是在 JVM 中與您的應(yīng)用程序一起運(yùn)行的復(fù)雜程序。Epsilon 消除了 GC 對(duì)性能的影響。沒(méi)有 GC 周期或讀取或?qū)懭胝系K。使用 Epsilon GC 時(shí),代碼是獨(dú)立運(yùn)行的。Epsilon 有助于可視化垃圾收集如何影響應(yīng)用程序的性能以及內(nèi)存閾值是多少,因?yàn)樗鼤?huì)在耗盡時(shí)顯示。例如,如果我們認(rèn)為我們的應(yīng)用程序只需要 1 GB 的內(nèi)存,我們可以使用 -Xmx1g 運(yùn)行它并查看行為。如果該內(nèi)存分配不足,請(qǐng)使用堆轉(zhuǎn)儲(chǔ)重新運(yùn)行它。請(qǐng)注意,我們必須啟用此選項(xiàng)才能獲得堆轉(zhuǎn)儲(chǔ)。

XX:HeapDumpOnOutOfMemoryError

如果我們需要充分利用應(yīng)用程序的性能,Epsilon 可能是 GC 的最佳選擇。但是我們需要對(duì)我們的代碼如何使用內(nèi)存有一個(gè)完整的了解。如果它幾乎不產(chǎn)生垃圾,或者您確切知道它在運(yùn)行期間使用了多少內(nèi)存,那么 Epsilon 是一個(gè)可行的選擇。

要啟用 Epsilon 垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseEpsilonGC -jar Application.java

6.Z垃圾收集器

ZGC 并發(fā)執(zhí)行所有昂貴的工作,不會(huì)停止應(yīng)用程序線程的執(zhí)行超過(guò) 10 毫秒,這使其適用于需要低延遲和/或使用非常大堆的應(yīng)用程序。根據(jù) Oracle 文檔,它可以處理數(shù) TB 的堆。Oracle 在 Java 11 中引入了 ZGC。Z 垃圾收集器在其線程中執(zhí)行其循環(huán)。它平均暫停應(yīng)用程序 1 毫秒。G1 和 Parallel 收集器平均大約 200 毫秒。

在 Java 12 中,即使 Z 仍處于實(shí)驗(yàn)狀態(tài),Oracle 也添加了性能修復(fù)和類卸載。它僅在 64 位 Linux 上可用。但是,ZGC 通過(guò)一種稱為指針著色的技術(shù)來(lái)利用 64 位指針。彩色指針存儲(chǔ)有關(guān)堆上對(duì)象的額外信息。這是它僅限于 64 位 JVM 的原因之一。

ZGC會(huì)嘗試自己設(shè)置線程數(shù),通常是對(duì)的。但是如果 ZGC 有太多的線程,它會(huì)餓死你的應(yīng)用程序。如果它沒(méi)有足夠的,您將創(chuàng)建垃圾比 GC 收集它的速度更快。ZGC 的階段說(shuō)明了它如何在不影響應(yīng)用程序內(nèi)存增長(zhǎng)的情況下管理大型堆。

要啟用 Z 垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseZGC -jar Application.java

7.Shenandoah

Shenandoah 是一個(gè)超低暫停時(shí)間的垃圾收集器,它通過(guò)與正在運(yùn)行的 Java 程序同時(shí)執(zhí)行更多的垃圾收集工作來(lái)減少 GC 暫停時(shí)間。CMS 和 G1 都執(zhí)行活動(dòng)對(duì)象的并發(fā)標(biāo)記。Shenandoah 增加了并發(fā)壓縮。

Shenandoah 使用內(nèi)存區(qū)域來(lái)管理哪些對(duì)象不再使用,哪些對(duì)象是活動(dòng)的并準(zhǔn)備好進(jìn)行壓縮。Shenandoah 還為每個(gè)堆對(duì)象添加了一個(gè)轉(zhuǎn)發(fā)指針,并使用它來(lái)控制對(duì)對(duì)象的訪問(wèn)。Shenandoah 的設(shè)計(jì)以并發(fā) CPU 周期和空間換取暫停時(shí)間的改進(jìn)。轉(zhuǎn)發(fā)指針使移動(dòng)對(duì)象變得容易,但激進(jìn)的移動(dòng)意味著 Shenandoah 比其他 GC 使用更多的內(nèi)存并且需要更多的并行工作。但它通過(guò)非常短暫的停頓來(lái)完成額外的工作。

Shenandoah 在許多小階段處理堆,其中大部分與應(yīng)用程序并發(fā)。這種設(shè)計(jì)使 GC 可以有效地管理大堆。

Shenandoah 提供與 ZGC 相同的優(yōu)勢(shì),具有大堆但更多的調(diào)整選項(xiàng)。根據(jù)您的應(yīng)用程序的性質(zhì),不同的啟發(fā)式方法可能非常適合。它的暫停時(shí)間可能不如 ZGC 的那么短,但它們更容易預(yù)測(cè)。

要啟用 Shenandoah 垃圾收集器,我們可以使用以下參數(shù):

java -XX:+UseShenanodoahC -jar Application.java

以上就是關(guān)于“7種Java垃圾回收器”的介紹,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),技術(shù)文檔中的內(nèi)容從入門到精通,細(xì)致全面,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 免费成人福利视频 | 日韩波多野结衣 | 黄色片视频国产 | 很很在线视频观看 | 亚洲黄色在线视频 | 中文字幕免费在线播放 | 最新黄色免费网站 | 男女性接交无遮挡免费看视频 | 国产精品亚洲午夜一区二区三区 | 在线精品小视频 | 日本人免费xxx在线视频 | 中文字幕一区二区三区乱码 | 最新亚洲精品国自产在线 | 国产在线观看成人免费视频 | 日本高清h色视频在线观看 日本妇人成熟免费观看18 | 亚洲精品性夜夜夜 | 欧美成人精品一区二三区在线观看 | 亚欧在线免费观看 | 欧美成人精品一区二三区在线观看 | 日韩精品视频一区二区三区 | 成年美女黄网站色大片免费看 | 综合网天天操天天射 | 激情综合亚洲 | 亚洲香蕉 | 最近的2019中文字幕4 | 全免费观看a级毛片 | 9re视频这里只有精品 | 夫妻生活毛片 | 最近2019中文字幕免费看最新 | 小 视频 黄 | 最近2019中文字幕mv免费看 | 久操社区 | 在线观看一区二区精品视频 | 亚洲成人手机在线 | 未满十八18勿进黄网站免费看 | 夜色私人影院永久入口 | 放荡的美妇一区二区三区 | 92看片淫黄大片看国产片 | 天堂va亚洲va欧美va国产 | 国产一区亚洲二区三区 | 男女无遮挡在线完整视频 |