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

淺談jvm中的垃圾回收策略

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

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

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

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

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

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

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

老年代的空間用于存放長時間幸存的對象,即生命周期較長的對象,一旦年輕代空間的幸存對象達到一定的年齡閾值后,將被自動提升到年老代,當年老代空間被對象填滿時,這時執(zhí)行一次Major GC。相較于minor GC, Major GC的執(zhí)行次數(shù)要比minor GC要少很多,同時,Major Gc 執(zhí)行的時間較Minor Gc要長。因為其涉及到更多的對象掃描。這種分代的思想,也是基于在實踐中,對于新分配的對象具有更短的生命周期,年老的對象具有更長的生命周期所作出的較佳的選擇。

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

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

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


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

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

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

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

Z

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

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

相關(guān)文章

  • springboot項目防止XSS攻擊和sql注入方式

    springboot項目防止XSS攻擊和sql注入方式

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

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

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

    SpringBoot接口路徑重復,啟動服務器失敗的解決

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

    Spring中的@EnableScheduling定時任務注解

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

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

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

    Java日常練習題,每天進步一點點(42)

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

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

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

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

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

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

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

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

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

最新評論

潍坊市| 海淀区| 江山市| 怀安县| 通许县| 博白县| 独山县| 青铜峡市| 高青县| 黔西县| 饶阳县| 和顺县| 永吉县| 桂阳县| 凤山县| 尼玛县| 东安县| 天门市| 玉环县| 镇坪县| 和平区| 黎平县| 余庆县| 罗平县| 阳信县| 南投市| 三台县| 红安县| 宝山区| 通化市| 海原县| 南乐县| 磐安县| 得荣县| 沅陵县| 桓仁| 三原县| 绵竹市| 崇文区| 龙口市| 福泉市|