亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談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ù)其它線程的操作。基于分代的思想是:jvm在每一次執(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)文章

  • Java中的適配器模式詳解

    Java中的適配器模式詳解

    這篇文章主要介紹了Java中的適配器模式詳解,適配器模式(Adapter?Pattern)將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個(gè)類可以協(xié)同工作,需要的朋友可以參考下
    2023-09-09
  • 探討Java驗(yàn)證碼制作(下篇)

    探討Java驗(yàn)證碼制作(下篇)

    這篇文章主要介紹了探討Java驗(yàn)證碼制作(下篇)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • SpringBoot中注冊(cè)過濾器的幾種實(shí)現(xiàn)方式

    SpringBoot中注冊(cè)過濾器的幾種實(shí)現(xiàn)方式

    本文主要介紹了SpringBoot中注冊(cè)過濾器的幾種實(shí)現(xiàn)方式,主要介紹了三種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 詳解Spring MVC3返回JSON數(shù)據(jù)中文亂碼問題解決

    詳解Spring MVC3返回JSON數(shù)據(jù)中文亂碼問題解決

    本篇文章主要介紹了Spring MVC3返回JSON數(shù)據(jù)中文亂碼問題解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析

    redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析

    這篇文章主要介紹了redis分布式鎖RedissonLock的實(shí)現(xiàn)細(xì)節(jié)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java開發(fā)常用類庫之Hutool詳解

    Java開發(fā)常用類庫之Hutool詳解

    這篇文章主要介紹了Java開發(fā)常用類庫之Hutool,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Servlet3.0學(xué)習(xí)總結(jié)之基于Servlet3.0的文件上傳實(shí)例

    Servlet3.0學(xué)習(xí)總結(jié)之基于Servlet3.0的文件上傳實(shí)例

    本篇文章主要介紹了Servlet3.0學(xué)習(xí)總結(jié)之基于Servlet3.0的文件上傳實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實(shí)現(xiàn)

    SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實(shí)現(xiàn)

    本文主要介紹了SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 用C和JAVA分別創(chuàng)建鏈表的實(shí)例

    用C和JAVA分別創(chuàng)建鏈表的實(shí)例

    使用用C和JAVA分別創(chuàng)建鏈表的方法,創(chuàng)建鏈表、往鏈表中插入數(shù)據(jù)、刪除數(shù)據(jù)等操作。
    2013-10-10
  • Spring JPA 錯(cuò)題集解決案例

    Spring JPA 錯(cuò)題集解決案例

    這篇文章主要為大家介紹了Spring JPA 錯(cuò)題集解決案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論