最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談jvm中的垃圾回收策略

 更新時(shí)間:2016年08月18日 10:08:50   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談jvm中的垃圾回收策略。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

java和C#中的內(nèi)存的分配和釋放都是由虛擬機(jī)自動(dòng)管理的,此前我已經(jīng)介紹了CLR中GC的對(duì)象回收方式,是基于代的內(nèi)存回收策略,其實(shí)在java中,JVM的對(duì)象回收策略也是基于分代的思想。這樣做的目的就是為了提高垃圾

回收的性能,避免對(duì)堆中的所有對(duì)象進(jìn)行檢查時(shí)所帶來的程序的響應(yīng)的延遲,因?yàn)閖vm執(zhí)行GC時(shí),會(huì)stop the word,即終止其它線程的運(yùn)行,等回收完畢,才恢復(fù)其它線程的操作?;诜执乃枷胧牵簀vm在每一次執(zhí)行垃圾收集器時(shí),只是對(duì)一小部分內(nèi)存

對(duì)象引用進(jìn)行檢查,這一小部分對(duì)象的生命周期也更短,從而加快了垃圾收集的性能。下面我們將來介紹java中的基于代的內(nèi)存回收算法的基本策略:

一、jvm堆內(nèi)存的分代劃分

在基于分代的內(nèi)存回收策略中,堆空間通常都被劃分為3個(gè)代,年輕代,年老代(或者tenured代),永久代。在年輕代中又被劃分了三個(gè)小的區(qū)域,分別為:Eden(伊甸)區(qū),S0區(qū)(survivor 0),S1區(qū)(survivor 1),如下圖所示:

其中,新的對(duì)象總被分配到年經(jīng)代中,當(dāng)年輕代空間被填滿時(shí),這時(shí)需要執(zhí)行一次垃圾回收,即執(zhí)行 minor GC,回收不再被引用的對(duì)象,并同時(shí)提升幸存的對(duì)象其年齡,年經(jīng)代中的幸存對(duì)象都有年齡標(biāo)識(shí)字段,一旦其達(dá)到一定的閾值,則仍然幸存的對(duì)象將被提升到老年代空間中。

老年代的空間用于存放長(zhǎng)時(shí)間幸存的對(duì)象,即生命周期較長(zhǎng)的對(duì)象,一旦年輕代空間的幸存對(duì)象達(dá)到一定的年齡閾值后,將被自動(dòng)提升到年老代,當(dāng)年老代空間被對(duì)象填滿時(shí),這時(shí)執(zhí)行一次Major GC。相較于minor GC, Major GC的執(zhí)行次數(shù)要比minor GC要少很多,同時(shí),Major Gc 執(zhí)行的時(shí)間較Minor Gc要長(zhǎng)。因?yàn)槠渖婕暗礁嗟膶?duì)象掃描。這種分代的思想,也是基于在實(shí)踐中,對(duì)于新分配的對(duì)象具有更短的生命周期,年老的對(duì)象具有更長(zhǎng)的生命周期所作出的較佳的選擇。

與此同時(shí),Minor Gc 和 Major Gc 在執(zhí)行垃圾收集時(shí),采取的是stop the world event ,即終止正在運(yùn)行的線程,等GC執(zhí)行完畢在恢復(fù)所有的線程。

對(duì)于永久代的內(nèi)存,主要是用來存放元數(shù)據(jù)的相關(guān)信息,類及其方法的信息。當(dāng)一個(gè)類不再使用時(shí)將會(huì)被回收,當(dāng)執(zhí)行Full GC時(shí),將會(huì)掃描永久代內(nèi)存,對(duì)其進(jìn)行垃圾回收。

二、基于分代的垃圾回收的處理過程


首先,初始時(shí),新對(duì)象被分配到Eden區(qū)域,s0,s1為空。當(dāng)Eden中的空間被填滿時(shí),執(zhí)行一次Minor GC。垃圾收集器會(huì)將被引用的對(duì)象移動(dòng)s0區(qū),不再被引用的對(duì)象將被刪除,與此同時(shí),對(duì)于幸存的對(duì)象標(biāo)識(shí)其年齡為1. GC后,Eden和S1區(qū)為空如下圖所示。

下一次執(zhí)行Minor GC后,與先前的執(zhí)行步驟相同,唯一的區(qū)別時(shí),這次的被引用的對(duì)象,即幸存下來的對(duì)象將會(huì)被移動(dòng)到S1區(qū),與此同時(shí)在s0區(qū)幸存的對(duì)象的年齡會(huì)增加1,變成2,如下圖所示。

當(dāng)再次,執(zhí)行Minor GC后,與先前的步驟相同,幸存對(duì)象會(huì)被移到S0區(qū),給幸存對(duì)象年齡加1.如下圖所示

最后執(zhí)行Minor GC 時(shí),發(fā)現(xiàn) S1中的幸存的對(duì)象年齡達(dá)到8(假設(shè)閾值 設(shè)為8),此時(shí)該對(duì)象將被提升到老年代內(nèi)存中,如下圖所示。

Z

當(dāng)老年代堆空間被對(duì)象填滿時(shí),將會(huì)執(zhí)行一次Major Gc,將會(huì)清除老年代不再被引用的對(duì)象,與此同時(shí),對(duì)該空間執(zhí)行壓縮。如下圖所示。

以上這篇淺談jvm中的垃圾回收策略就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot項(xiàng)目防止XSS攻擊和sql注入方式

    springboot項(xiàng)目防止XSS攻擊和sql注入方式

    這篇文章主要介紹了springboot項(xiàng)目防止XSS攻擊和sql注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringIOC DI循環(huán)依賴實(shí)例詳解

    SpringIOC DI循環(huán)依賴實(shí)例詳解

    這篇文章主要介紹了SpringIOC——DI循環(huán)依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot接口路徑重復(fù),啟動(dòng)服務(wù)器失敗的解決

    SpringBoot接口路徑重復(fù),啟動(dòng)服務(wù)器失敗的解決

    這篇文章主要介紹了SpringBoot接口路徑重復(fù),啟動(dòng)服務(wù)器失敗的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring中的@EnableScheduling定時(shí)任務(wù)注解

    Spring中的@EnableScheduling定時(shí)任務(wù)注解

    這篇文章主要介紹了Spring中的@EnableScheduling注解,@EnableScheduling是 Spring Framework 提供的一個(gè)注解,用于啟用 Spring 的定時(shí)任務(wù)功能,通過使用這個(gè)注解,可以在 Spring 應(yīng)用程序中創(chuàng)建定時(shí)任務(wù),需要的朋友可以參考下
    2024-01-01
  • Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的操作方法

    Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的操作方法

    這篇文章主要介紹了Java異步判斷線程池所有任務(wù)是否執(zhí)行完成的方法,在這個(gè)示例中,我使用了傳統(tǒng)的匿名內(nèi)部類來創(chuàng)建Callable任務(wù)(同時(shí)也提供了Lambda表達(dá)式的注釋),以便與各種Java版本兼容,需要的朋友可以參考下
    2024-07-07
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(42)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(42)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Mybatis核心配置文件加載流程詳解

    Mybatis核心配置文件加載流程詳解

    本文將介紹MyBatis在配置文件加載的過程中,如何加載核心配置文件、如何解析映射文件中的SQL語句以及每條SQL語句如何與映射接口的方法進(jìn)行關(guān)聯(lián),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java網(wǎng)絡(luò)編程實(shí)現(xiàn)多線程聊天

    Java網(wǎng)絡(luò)編程實(shí)現(xiàn)多線程聊天

    這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程實(shí)現(xiàn)多線程聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹

    java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹

    這篇文章主要介紹了java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹的相關(guān)資料,這里對(duì)數(shù)據(jù)類型進(jìn)行了一一介紹分析,并說明自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換,需要的朋友可以參考下
    2017-07-07
  • 詳解Redisson分布式限流的使用及原理

    詳解Redisson分布式限流的使用及原理

    本文介紹了Redisson分布式限流的使用方法和原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評(píng)論

石家庄市| 甘洛县| 渭源县| 察哈| 宁晋县| 临武县| 元谋县| 台北县| 新干县| 鄂伦春自治旗| 荃湾区| 阜平县| 吴旗县| 竹北市| 枞阳县| 顺平县| 垫江县| 海林市| 临澧县| 台湾省| 信宜市| 普兰店市| 维西| 武功县| 靖安县| 长阳| 广西| 突泉县| 黄冈市| 库尔勒市| 兴国县| 翁源县| 江川县| 迭部县| 城步| 浦县| 古交市| 九龙坡区| 苍梧县| 额济纳旗| 渭南市|