国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型

這篇具有很好參考價(jià)值的文章主要介紹了JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

詳細(xì)畫(huà)的jvm模型圖

https://www.processon.com/diagraming/64c8aa11c07d99075d934311

官方網(wǎng)址

https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

相關(guān)概念

  • 年輕代是所有新對(duì)象被分配和老化的地方。當(dāng)年輕代填滿(mǎn)時(shí),這會(huì)導(dǎo)致minor garbage collection,minor gc會(huì)回收掉很多的游離對(duì)象。游離的年輕代很快就被收集起來(lái)。一些幸存的最終轉(zhuǎn)移到老年代。

  • Stop the World Event(STW),所有minor gc都是STW。這意味著所有應(yīng)用程序線程都將停止,直到操作完成。

  • 老年代用于存儲(chǔ)長(zhǎng)期存活的對(duì)象。通常,為年輕代對(duì)象設(shè)置閾值,當(dāng)達(dá)到該年齡時(shí),對(duì)象將移動(dòng)到老年代。最終需要回收老年代。此事件稱(chēng)為major garbage collection。

  • major gc也會(huì)觸發(fā)STW。通常,major gc會(huì)更慢,因?yàn)樗婕八谢顒?dòng)對(duì)象。因此,對(duì)于響應(yīng)式應(yīng)用程序,應(yīng)盡量減少major gc。

分代垃圾回收過(guò)程:

1.首先,任何新對(duì)象都被分配到eden區(qū)。兩個(gè)幸存區(qū)一開(kāi)始都是空的。

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

2.當(dāng)eden區(qū)填滿(mǎn)時(shí),將觸發(fā)minor gc

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

3.引用的對(duì)象將移動(dòng)到S0。清除eden,將刪除未引用的對(duì)象。

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

4.在下一個(gè)minorGC中,eden也會(huì)發(fā)生同樣的事情。未引用的對(duì)象將被刪除,引用的對(duì)象將移動(dòng)到幸存者區(qū)。但是,在這種情況下,它們被移動(dòng)到第二個(gè)幸存者區(qū) (S1)。此外,來(lái)自第一個(gè)幸存者區(qū) (S0) 上最后一次minor GC 的對(duì)象會(huì)增加其年齡并移動(dòng)到 S1。一旦所有幸存的物體都被移動(dòng)到S1,S0和Eden都會(huì)被清除。請(qǐng)注意,我們現(xiàn)在在幸存者區(qū)s1中有不同年齡age的對(duì)象

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

5.在下一次minor GC 中,重復(fù)相同的過(guò)程。然而,這一次幸存者空間切換了。引用的對(duì)象將移動(dòng)到 S0。幸存的對(duì)象會(huì)老化age+1。eden和S1被清除。

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

6.這里為了演示,當(dāng)年齡對(duì)象達(dá)到一定的年齡閾值(在本例中為 8)時(shí),它們將從新生代晉升為老年代

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

7.隨著minor GC 的繼續(xù)出現(xiàn),對(duì)象將繼續(xù)提升到老年代

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

8.這幾乎涵蓋了年輕代的整個(gè)過(guò)程。最終,將對(duì)老年代進(jìn)行major GC,以清理和壓縮該空間

JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型,JVM,jvm,學(xué)習(xí),java

常用的設(shè)置項(xiàng)

設(shè)置項(xiàng) 描述
-Xms Sets the initial heap size for when the JVM starts. 設(shè)置 JVM 啟動(dòng)時(shí)的初始堆大小
-Xmx Sets the maximum heap size.設(shè)置堆最大值
-Xmn Sets the size of the Young Generation.設(shè)置年輕代最大值
-XX:PermSize Sets the starting size of the Permanent Generation.設(shè)置永久代的起始值
-XX:MaxPermSize Sets the maximum size of the Permanent Generation設(shè)置永久代的最大值

案例:下面是一個(gè)簡(jiǎn)單的開(kāi)始Java2Demo的例子:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

java垃圾回收算法

1.標(biāo)記-清除法:通過(guò)gc root 標(biāo)記所有被程序引用的對(duì)象,然后清理沒(méi)有被標(biāo)記的對(duì)象??偣卜譃閮蓚€(gè)階段:標(biāo)記和清除
	缺點(diǎn):
		1.效率較低,標(biāo)記和清除兩個(gè)動(dòng)作都需要遍歷所有對(duì)象,并且在GC時(shí),都需要暫停應(yīng)用程序,對(duì)于交互性比較要求比較高的應(yīng)用而言這種體驗(yàn)非常差
		2.會(huì)產(chǎn)生內(nèi)存碎片,通過(guò)標(biāo)記清除法清理出來(lái)的內(nèi)存碎片化較為嚴(yán)重,因?yàn)楸磺謇淼膶?duì)象存在于內(nèi)存的各個(gè)角落,所以清理出來(lái)的內(nèi)存不是連貫的

2.標(biāo)記-整理法:是在標(biāo)記清除法的基礎(chǔ)上進(jìn)行了優(yōu)化,和上面的一種算法標(biāo)記階段是一樣的,不同的是在清除階段,不是簡(jiǎn)單的清除未標(biāo)記的對(duì)象,而是將所有的已經(jīng)標(biāo)記的存活對(duì)象移向一端,然后清除該端以為的所有內(nèi)存。
	缺點(diǎn):解決了標(biāo)記清除法碎片化問(wèn)題,同時(shí)多了整理的這一步,對(duì)象移動(dòng)內(nèi)存位置的步驟,其效率有一定的影響

3.復(fù)制算法:這是一種將內(nèi)存空間分為兩個(gè)部分的垃圾回收算法,通常稱(chēng)為“From”空間和“To”空間。在分配內(nèi)存時(shí),對(duì)象會(huì)被分配到From空間。當(dāng)From空間占滿(mǎn)一定比例時(shí),觸發(fā)垃圾回收過(guò)程。垃圾回收器會(huì)遍歷From空間,將存活的對(duì)象復(fù)制到To空間,并按照順序排列。然后,回收整個(gè)From空間,將其標(biāo)記為空閑的內(nèi)存,然后將From空間和To空間交換角色
	缺點(diǎn):如果內(nèi)存中的垃圾對(duì)象較多,需要復(fù)制的對(duì)象少,這種情況下使用這個(gè)算法比較合適效率較高,反之,不合適。

垃圾回收器的分類(lèi)

分類(lèi)方式:按線程數(shù)分、按照工作模式分、按碎片處理方式分、按工作的內(nèi)存區(qū)間分

按線程數(shù)分

  • 可以分為串行垃圾回收器(Serial Collector)和并行垃圾回收器(Parallel Collector)。
    • 串行回收指的是在同一時(shí)間段內(nèi)只允許有一個(gè) CPU 用于執(zhí)行垃圾回收操作,此時(shí)工作線程被暫停,直至垃圾收集工作結(jié)束。
    • 和串行回收相反,并行收集可以運(yùn)用多個(gè) CPU 同時(shí)執(zhí)行垃圾回收,因此提升了應(yīng)用的吞吐量,不過(guò)并行回收仍然與串行回收一樣,采用獨(dú)占式,使用了 STW 機(jī)制。

按照工作模式分

  • 可以分為并發(fā)式垃圾回收器和獨(dú)占式垃圾回收器。
    • 并發(fā)式垃圾回收器與應(yīng)用程序線程交替工作,以盡可能減少應(yīng)用程序的停頓時(shí)間。
    • 獨(dú)占式垃圾回收器一旦運(yùn)行,就停止應(yīng)用程序中的所有用于線程,直到垃圾回收過(guò)程完全結(jié)束。

按碎片處理方式分

  • 可以分為壓縮式垃圾回收器和非壓縮式垃圾回收器。
    • 壓縮式垃圾回收器會(huì)在回收完成后,對(duì)存活對(duì)象進(jìn)行壓縮整理,消除回收后的碎片。(再分配對(duì)象空間使用指針碰撞)
    • 非壓縮式的垃圾回收器不進(jìn)行這步操作。(再分配對(duì)象空間使用空閑列表)

按工作的內(nèi)存區(qū)間分

  • 又可分為年輕代垃圾回收器和老年代垃圾回收器

設(shè)置案例

串行回收器

要啟用串行回收器(Serial Collector)使用,請(qǐng)執(zhí)行以下操作:
-XX:+UseSerialGC
下面是用于啟動(dòng)Java2Demo的示例命令行:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

并行回收器

也稱(chēng)為吞吐量回收器。因?yàn)樗梢允褂枚鄠€(gè) CPU 來(lái)加快應(yīng)用程序吞吐量。當(dāng)需要完成大量工作并且可以接受長(zhǎng)時(shí)間暫停時(shí),應(yīng)使用此回收器。例如,批處理,如打印報(bào)表或帳單,或執(zhí)行大量數(shù)據(jù)庫(kù)查詢(xún)。
-XX:+UseParallelGC
使用此命令行選項(xiàng),您將獲得具有單線程老年代回收器的多線程年輕代回收器。該選項(xiàng)還執(zhí)行老年代代的單線程壓縮。
下面是用于啟動(dòng)Java2Demo的示例命令行:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

-XX:+UseParallelOldGC
通過(guò)該選項(xiàng),GC 既是多線程年輕代回收器,又是多線程老年代收集器。它也是一個(gè)多線程壓縮收集器。HotSpot僅在老一代中進(jìn)行壓縮。熱點(diǎn)中的年輕一代被認(rèn)為是復(fù)制家;因此,不需要壓縮。

壓縮描述了以對(duì)象之間沒(méi)有孔的方式移動(dòng)對(duì)象的行為。垃圾回收掃描后,活動(dòng)對(duì)象之間可能會(huì)留下孔洞。壓實(shí)會(huì)移動(dòng)對(duì)象,以便沒(méi)有剩余的孔。垃圾回收器可能是非壓縮收集器。因此,并行收集器和并行壓縮收集器之間的區(qū)別可能是后者在垃圾回收掃描后壓縮空間。前者不會(huì)。

下面是用于啟動(dòng) 的示例命令行:Java2Demo

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelOldGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

并發(fā)標(biāo)記掃描 (CMS) 回收器

并發(fā)標(biāo)記掃描 (CMS) 回收器(也稱(chēng)為并發(fā)低暫?;厥掌鳎?。它嘗試通過(guò)與應(yīng)用程序線程同時(shí)執(zhí)行大部分垃圾回收工作來(lái)最大程度地減少由于垃圾回收而導(dǎo)致的暫停。通常,并發(fā)低暫?;厥掌鞑粫?huì)復(fù)制或壓縮活動(dòng)對(duì)象。垃圾回收是在不移動(dòng)活動(dòng)對(duì)象的情況下完成的。如果碎片成為問(wèn)題,請(qǐng)分配更大的堆。
注意:年輕代的CMS回收器使用與并行回收器相同的算法。

要啟用 CMS 回收器,請(qǐng)使用:
-XX:+UseConcMarkSweepGC
并設(shè)置線程數(shù),請(qǐng)使用:
-XX:ParallelCMSThreads=<n>

下面是用于啟動(dòng)Java2Demo的示例命令行:

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=2 -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

G1 垃圾收集器

Garbage First 或 G1 垃圾回收器在 Java 7 中可用,旨在作為 CMS 回收器的長(zhǎng)期替代品。G1 收集器是一個(gè)并行、并發(fā)且增量壓縮的低暫停垃圾回收器,其布局與前面描述的其他垃圾回收器完全不同。
要啟用 G1 收集器,請(qǐng)使用:
-XX:+UseG1GC
下面是用于啟動(dòng)Java2Demo的示例命令行:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-626957.html

java -Xmx12m -Xms3m -XX:+UseG1GC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar

到了這里,關(guān)于JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過(guò)程、可用的垃圾回收器類(lèi)型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分代收集 + 垃圾回收算法

    分代收集 + 垃圾回收算法

    1. 弱分代假說(shuō)(Weak Generational Hypothesis):絕大多數(shù)對(duì)象都是朝生夕滅的 2. 強(qiáng)分代假說(shuō)(Strong Generational Hypothesis):熬過(guò)越多次垃圾收集過(guò)程的對(duì)象就越難以消亡 3. 跨代引用假說(shuō)(Intergenerational Reference Hypothesis):跨代引用相對(duì)于同代引用來(lái)說(shuō)僅占極少數(shù) ?? 收集器應(yīng)該將J

    2024年02月12日
    瀏覽(30)
  • 了解 JVM - 認(rèn)識(shí)垃圾回收機(jī)制與類(lèi)加載過(guò)程

    了解 JVM - 認(rèn)識(shí)垃圾回收機(jī)制與類(lèi)加載過(guò)程

    本篇通過(guò)介紹JVM是什么,認(rèn)識(shí)JVM的內(nèi)存區(qū)域的劃分,了解類(lèi)加載過(guò)程,JVM中垃圾回收機(jī)制,從中了解到垃圾回收機(jī)制中如何找到存活對(duì)象的方式,引用計(jì)數(shù)與可達(dá)性分析的方式,再釋放垃圾對(duì)象時(shí)使用的方式,標(biāo)準(zhǔn)清除,復(fù)制算法,標(biāo)準(zhǔn)整理,分代回收等等,如有錯(cuò)誤,請(qǐng)?jiān)?/p>

    2024年02月16日
    瀏覽(34)
  • 【Java】JVM執(zhí)行流程、類(lèi)加載過(guò)程和垃圾回收機(jī)制

    【Java】JVM執(zhí)行流程、類(lèi)加載過(guò)程和垃圾回收機(jī)制

    JVM,就是Java虛擬機(jī),Java的的程序都是運(yùn)行在JVM當(dāng)中。 程序在執(zhí)行之前先要把java源代碼轉(zhuǎn)換成字節(jié)碼(class文件),JVM 首先需要把字節(jié)碼通過(guò)一定的方(類(lèi)加載器(ClassLoader)) 把文件加載到內(nèi)存中的運(yùn)行時(shí)數(shù)據(jù)區(qū)(Runtime Data Area) ,而字節(jié)碼文件是 JVM 的一套指令集規(guī)范,并

    2024年02月16日
    瀏覽(23)
  • 【JVM】JVM中的分代回收

    【JVM】JVM中的分代回收

    什么是分代 在java8時(shí),堆被分為了兩份: 新生代和老年代 【1:2】 其中: 對(duì)于 新生代 ,內(nèi)部又被分為了 三個(gè)區(qū)域。 伊甸園區(qū)Eden ,新生的對(duì)象都分配到這里 幸存者區(qū)survivor (分成from和to) Eden區(qū),from區(qū),to區(qū)【8:1:1】 分代收集算法-工作機(jī)制 新 創(chuàng)建的 對(duì)象 ,都會(huì)先 分配

    2024年02月13日
    瀏覽(25)
  • 【Java虛擬機(jī)】JVM垃圾回收機(jī)制和常見(jiàn)回收算法原理

    【Java虛擬機(jī)】JVM垃圾回收機(jī)制和常見(jiàn)回收算法原理

    1.垃圾回收機(jī)制 (1)什么是垃圾回收機(jī)制(Garbage Collection, 簡(jiǎn)稱(chēng)GC) 指自動(dòng)管理動(dòng)態(tài)分配的內(nèi)存空間的機(jī)制,自動(dòng)回收不再使用的內(nèi)存,以避免內(nèi)存泄漏和內(nèi)存溢出的問(wèn)題 最早是在1960年代提出的,程序員需要手動(dòng)管理內(nèi)存的分配和釋放 這往往會(huì)導(dǎo)致內(nèi)存泄漏和內(nèi)存溢出等問(wèn)

    2024年02月02日
    瀏覽(37)
  • 從原理聊JVM(一):染色標(biāo)記和垃圾回收算法

    作者:京東科技?康志興 ? 方法區(qū) 屬于共享內(nèi)存區(qū)域,存儲(chǔ)已被虛擬機(jī)加載的類(lèi)信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。運(yùn)行時(shí)常量池,屬于方法區(qū)的一部分,用于存放編譯期生成的各種字面量和符號(hào)引用。 JDK1.8之前,Hotspot虛擬機(jī)對(duì)方法區(qū)的實(shí)現(xiàn)叫做永久

    2023年04月21日
    瀏覽(18)
  • 【jvm系列-10】深入理解jvm垃圾回收器的種類(lèi)以及內(nèi)部的執(zhí)行原理

    【jvm系列-10】深入理解jvm垃圾回收器的種類(lèi)以及內(nèi)部的執(zhí)行原理

    JVM系列整體欄目 內(nèi)容 鏈接地址 【一】初識(shí)虛擬機(jī)與java虛擬機(jī) https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的類(lèi)加載子系統(tǒng)以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】運(yùn)行時(shí)私有區(qū)域之虛擬機(jī)棧、程序計(jì)數(shù)器、本地方法棧 https

    2024年02月05日
    瀏覽(31)
  • 【jvm系列-09】垃圾回收底層原理和算法以及JProfiler的基本使用

    【jvm系列-09】垃圾回收底層原理和算法以及JProfiler的基本使用

    JVM系列整體欄目 內(nèi)容 鏈接地址 【一】初識(shí)虛擬機(jī)與java虛擬機(jī) https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的類(lèi)加載子系統(tǒng)以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】運(yùn)行時(shí)私有區(qū)域之虛擬機(jī)棧、程序計(jì)數(shù)器、本地方法棧 https

    2023年04月22日
    瀏覽(29)
  • 從原理聊JVM(三):詳解現(xiàn)代垃圾回收器Shenandoah和ZGC

    從原理聊JVM(三):詳解現(xiàn)代垃圾回收器Shenandoah和ZGC

    作者:京東科技 康志興 Shenandoah一詞來(lái)自于印第安語(yǔ),十九世紀(jì)四十年代有一首著名的航海歌曲在水手中廣為流傳,講述一位年輕富商愛(ài)上印第安酋長(zhǎng)Shenandoah的女兒的故事。 后來(lái)美國(guó)有一條位于Virginia州西部的小河以此命名,所以Shenandoah的中文譯名為“情人渡”。 Shenandoa

    2023年04月27日
    瀏覽(20)
  • 【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別?

    【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別?

    【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別? 目錄 本文導(dǎo)讀 一、垃圾回收器概覽 Serial GC工作原理概覽 Parallel GC工作原理概覽 CMS回收器工作原理概覽 G1回收器工作原理概覽 2、選擇適合的垃圾回收器 二、串行垃圾回收器(Serial GC) 工作原理 工

    2024年04月16日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包