【讀書筆記】深入理解Java虛擬機器——垃圾收集

來源:互聯網
上載者:User
Ubuntu11.10下編譯 OpenJDK7

http://blog.csdn.net/yhmhappy2006/article/details/7281710

基本垃圾收集演算法 標記-清除(Mark-Sweep)

效率問題
記憶體片段
適用於老年代
複製(Copying)

解決片段問題
可用記憶體縮小(一半)
存活率高時,複製效率低
用於新生代
標記-整理(Mark-Compact)

適用於老年代
老年代存活率高,不適合複製演算法
垃圾收集器


新生代垃圾收集器-基於複製Serial

單線程(暫停使用者線程)
複製
Client模式預設
ParNew

多線程並行(暫停使用者線程)
複製
-XX:+UseParNewGC
預設開啟CPU個數個線程(-XX:ParallelGCThreads)
Server模式下新生代首先(與CMS配合老年代)
Parallel Scavenge

多線程並行(暫停使用者線程)
複製

“輸送量優先”收集器,可精確控制輸送量
輸送量=使用者代碼時間/(使用者代碼時間+垃圾收集時間)
老年代垃圾收集器-基於標記-整理/清除Serial Old

Serial的老年代版本
單線程(暫停使用者線程)
標記-整理
主要在Client模式下使用
在Server下,作為CMS的後備,或與新生代PS收集器配合使用
Parallel Old

Parallel Scavenge老年代版
多線程並行(暫停使用者線程)
標記-整理
From JDK1.6
CMS

適合互連網應用
並發
標記-清除(片段!)
預設線程數:(CPU數量+3)/4
老年代使用了68%後觸發(-XX:CMSInitiatingOccupancyFraction)
CMS步驟

初始標記
並發標記
重新標記
並發清除
其中兩個“並發”步驟是不暫停使用者線程的
記憶體配置回收策略

小對象在Eden區分配
大對象直接在老年代分配
(-XX:PretenureSizeThreshold)
長期存活的對象進入老年代
(-XX:MaxTenuringThreshold)
動態對象年齡判斷
年齡為y的對象個數有n個,如果這n個對象的大小總和大於Survivor空間的一半,則年齡>=y的對象直接進入老年代,無需等到MaxTenuringThreshold
空間分配擔保
相關工具jmap

-heap

查看哪種收集器、分代情況(Linux)
-dump
產生堆快照
-dump:format=b,file=<filename>
-F
強制dump (Linux)
See

http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html
jstat

-class
監視類裝載、卸載數量等
GC
-gc
-gcutil
JIT
……
See

http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html
MAT

Java堆分析器,分析jmap –dump下來的資料,以圖形介面形式展示分析結果

http://www.eclipse.org/mat/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.