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

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

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

    stone2083

    jdk gc簡介

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

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

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

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

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

    Feedback

    # re: jdk gc簡介 2008-03-24 09:33 倪煒

    很不錯,最近在看這個東西,sun的文檔看的不是很清楚,這里寫的很明白了。  回復  更多評論   

    # re: jdk gc簡介 2008-07-03 22:09 stone2083

    這么朋友實在是過獎了.
    我僅僅記錄了我對jdk gc的淺薄理解.
    sun的文檔,比我這邊是詳細多了.  回復  更多評論   

    主站蜘蛛池模板: 无码人妻精品中文字幕免费东京热| 一级人做人爰a全过程免费视频| 成全视频高清免费观看电视剧| 亚洲精品一级无码中文字幕| 美女免费视频一区二区| 免费黄色毛片视频| 亚洲AV无码一区二区三区牲色 | 一级午夜a毛片免费视频| 日韩午夜免费视频| 亚洲av无码无线在线观看| 香蕉视频在线观看免费国产婷婷| 亚洲自国产拍揄拍| 成年女人免费视频播放体验区| 久久精品国产亚洲αv忘忧草| 全免费毛片在线播放| 亚洲 日韩经典 中文字幕| 91香蕉视频免费| www.亚洲成在线| 久久WWW色情成人免费观看| 中国china体内裑精亚洲日本| 在线观看免费人成视频色9| 亚洲乱码一区二区三区国产精品| 久久这里只有精品国产免费10| 亚洲欧洲免费无码| 免费日本黄色网址| 岛国精品一区免费视频在线观看| 亚洲精品无码av人在线观看 | 99国产精品永久免费视频| 91丁香亚洲综合社区| 日本高清免费不卡在线| 伊人久久国产免费观看视频| 亚洲乱码中文字幕久久孕妇黑人| 四虎影视无码永久免费| 久久亚洲日韩看片无码| 成年女人免费v片| yellow视频免费看| 久久亚洲中文字幕精品有坂深雪 | 亚洲人成免费电影| 亚洲国产成人久久综合| 亚洲色一色噜一噜噜噜| 99国产精品免费观看视频|