<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    jdk gc簡(jiǎn)介

    常用的GC算法:
    1)標(biāo)記非活動(dòng)對(duì)象
    --何為非活動(dòng)對(duì)象,通俗的講,就是無(wú)引用的對(duì)象。
    • 追蹤root對(duì)象算法: 深度追蹤root對(duì)象,將heap中所有被引用到的root做標(biāo)志,所有未被標(biāo)志的對(duì)象視為非活動(dòng)對(duì)象,所占用的空間視為非活動(dòng)內(nèi)存。
    2)清理非活動(dòng)對(duì)象
    • Copy算法:          
    • 方法:將內(nèi)存分為兩個(gè)區(qū)域(from space和to space)。所有的對(duì)象分配內(nèi)存都分配到from space。在清理非活動(dòng)對(duì)象階段,把所有標(biāo)志為活動(dòng)的對(duì)象,copy到to space,之后清楚from space空間。然后互換from sapce和to space的身份。既原先的from space變成to sapce,原先的to space變成from space。每次清理,重復(fù)上述過(guò)程。
    • 優(yōu)點(diǎn):copy算法不理會(huì)非活動(dòng)對(duì)象,copy數(shù)量?jī)H僅取決為活動(dòng)對(duì)象的數(shù)量。并且在copy的同時(shí),整理了heap空間,即,to space的空間使用始終是連續(xù)的,內(nèi)存使用效率得到提高。
    • 缺點(diǎn):劃分from space和to space,內(nèi)存的使用率是1/2。
    •   Compaction算法
      • 方法:在清理非活動(dòng)對(duì)象階段,刪除非活動(dòng)對(duì)象占用內(nèi)存,并且把活動(dòng)對(duì)象向heap的底部移動(dòng),直到所有的活動(dòng)對(duì)象被移到heap的一側(cè)。
      • 優(yōu)點(diǎn):無(wú)須劃分from sapce和to space,提高內(nèi)存的使用率。并且compaction后的內(nèi)存空間也是連續(xù)分配的。
      • 缺點(diǎn):該算法相對(duì)比較復(fù)雜。
    sun jdk gc介紹:
    在減少gc之前,先來(lái)看看來(lái)自IBM的一組統(tǒng)計(jì)數(shù)據(jù):
    98%的java對(duì)象,在創(chuàng)建之后不久就變成了非活動(dòng)對(duì)象;只有2%的對(duì)象,會(huì)在長(zhǎng)時(shí)間一直處于活動(dòng)狀態(tài)。

    如果能對(duì)這兩種對(duì)象區(qū)分對(duì)象,那么會(huì)提交GC的效率。在sun jdk gc中(具體的說(shuō),是在jdk1.4之后的版本),提出了不同生命周期的GC策略。
    • young generation
      • 生命周期很短的對(duì)象,歸為young generation。由于生命周期很短,這部分對(duì)象在gc的時(shí)候,很大部分的對(duì)象已經(jīng)成為非活動(dòng)對(duì)象。因此針對(duì)young  generation的對(duì)象,采用copy算法,只需要將少量的存活下來(lái)的對(duì)象copy到to space。存活的對(duì)象數(shù)量越少,那么copy算法的效率越高。
      • young generation的gc稱(chēng)為minor gc。經(jīng)過(guò)數(shù)次minor gc,依舊存活的對(duì)象,將被移出young generation,移到tenured generation(下面將會(huì)介紹)

      • young generation分為:
        • eden:每當(dāng)對(duì)象創(chuàng)建的時(shí)候,總是被分配在這個(gè)區(qū)域
        • survivor1:copy算法中的from space
        • survivor2:copy算法中的to sapce (備注:其中survivor1和survivor2的身份在每次minor gc后被互換)
      • minor gc的時(shí)候,會(huì)把eden+survivor1(2)的對(duì)象copy到survivor2(1)去。
    • tenured generation
      • 生命周期較常的對(duì)象,歸入到tenured generation。一般是經(jīng)過(guò)多次minor gc,還 依舊存活的對(duì)象,將移入到tenured generation。(當(dāng)然,在minor gc中如果存活的對(duì)象的超過(guò)survivor的容量,放不下的對(duì)象會(huì)直接移入到tenured generation)
      • tenured generation的gc稱(chēng)為major gc,就是通常說(shuō)的full gc。
      • 采用compactiion算法。由于tenured generaion區(qū)域比較大,而且通常對(duì)象生命周期都比較常,compaction需要一定時(shí)間。所以這部分的gc時(shí)間比較長(zhǎng)。
      • minor gc可能引發(fā)full gc。當(dāng)eden+from space的空間大于tenured generation區(qū)的剩余空間時(shí),會(huì)引發(fā)full gc。這是悲觀算法,要確保eden+from space的對(duì)象如果都存活,必須有足夠的tenured generation空間存放這些對(duì)象。
    • Permanet Generation:
      • 該區(qū)域比較穩(wěn)定,主要用于存放classloader信息,比如類(lèi)信息和method信息。
      • 對(duì)于spring hibernate這些需要?jiǎng)討B(tài)類(lèi)型支持的框架,這個(gè)區(qū)域需要足夠的空間。

    這部分內(nèi)容相對(duì)比較理論,可以結(jié)合jstat,jmap等命令(當(dāng)然也可以使用jconsole,jprofile,gciewer等工具),觀察jdk gc的情況。

    posted on 2008-03-15 17:11 stone2083 閱讀(2020) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): java

    Feedback

    # re: jdk gc簡(jiǎn)介 2008-03-24 09:33 倪煒

    很不錯(cuò),最近在看這個(gè)東西,sun的文檔看的不是很清楚,這里寫(xiě)的很明白了。  回復(fù)  更多評(píng)論   

    # re: jdk gc簡(jiǎn)介 2008-07-03 22:09 stone2083

    這么朋友實(shí)在是過(guò)獎(jiǎng)了.
    我僅僅記錄了我對(duì)jdk gc的淺薄理解.
    sun的文檔,比我這邊是詳細(xì)多了.  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚洲国产精品无码久久一区二区 | igao激情在线视频免费| 四虎在线免费播放| 亚洲精品无码mⅴ在线观看| 一二三四在线播放免费观看中文版视频| 精品亚洲aⅴ在线观看| 亚洲一区二区在线免费观看| 久久久无码精品亚洲日韩蜜桃 | 一级毛片全部免费播放| 亚洲AV无码国产精品麻豆天美| 免费无码av片在线观看| 亚洲精品在线观看视频| 亚洲高清中文字幕免费| 亚洲天堂免费在线| 女人被弄到高潮的免费视频| 亚洲精品乱码久久久久久V| 国产成人精品免费直播| 国产精品青草视频免费播放| 亚洲av无码专区国产乱码在线观看| 久久久久国色av免费看| 亚洲av乱码一区二区三区| 免费看片A级毛片免费看| 一级做a爱片特黄在线观看免费看| 国产中文在线亚洲精品官网| 伊人久久免费视频| 亚洲六月丁香婷婷综合| 国产无遮挡吃胸膜奶免费看视频| 国产视频精品免费视频| 久久精品国产亚洲av日韩| 毛片免费全部免费观看| yellow视频免费看| 亚洲福利电影一区二区?| 免费高清在线爱做视频| 久草免费福利在线| 亚洲乱码卡三乱码新区| 亚洲第一区精品日韩在线播放| 色欲色香天天天综合网站免费| 亚洲欧美日本韩国| 久久精品国产亚洲网站| 浮力影院第一页小视频国产在线观看免费 | 99久久免费国产精品热|