JVM_垃圾回收串行、並行、並發算法(總結)



一、串行
  1. JDK1.5前的默認算法
  2. 缺點是只有一個線程,執行垃圾回收時程序停止的時間比較長
  3. 語法
    1. -XX:+UseSerialGC
    2. 新生代、老年代使用串行回收
    3. 新生代復制算法
    4. 老年代標記-壓縮
  4. 示例圖
  5. 測試代碼
 //-Xmx20m -Xms20m -Xmn2m -XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
        byte[] b = null;
        for (int i = 0; i < 7; i++)
        {
            b = new byte[3 * 1024 * 1024];
        }
串行的關鍵字是DefNew(年輕代)、Tenured(年老代)、Perm(永久代)
0.162: [GC0.162: [ DefNew: 1562K->191K(1856K), 0.0030044 secs]
0.165: [ Tenured: 15917K->3820K(18432K), 0.0059132 secs] 16922K->3820K(20288K), 
[ Perm : 2890K->2890K(21248K)], 0.0090042 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 


二、並行
  1. 多個線程執行垃圾回收
  2. 適合於吞吐量的系統,回收時系統會停止運行
  3. 語法
    1. -XX:+UseParNewGC(新生代使用並行收集器,老年代使用串行回收收集器)
      關鍵字(ParNew)
    2. -XX:+UseParallelGC(新生代使用並行回收收集器,老年代使用串行收集器)
    3. -XX:+UseParallelOldGC(新生代,老年代都使用並行回收收集器
      關鍵字(PSYoungGen)
    4. -XX:+UseConcMarkSweepGC(新生代使用並行收集器,老年代使用CMS)
    5. -XX:ParallelGCThreads 限制並行線程數量
    6. -XX:MaxGCPauseMills  GC最大停頓毫秒數
    7. -XX:GCTimeRatio 垃圾回收占用的CPU時間比例,默認99代表最大運行1%時間做GC
    8. 新生代復制算法
    9. 老年代標記-壓縮
  4. 示例圖
  5. UseParNewGC 代碼同串行,年輕代並行,年老代串行 
    -Xmx20m -Xms20m -Xmn2m -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
         
    0.193: [GC0.193: [ParNew: 1601K->192K(1856K), 0.0093101 secs]0.202: [Tenured: 15948K->3834K(18432K), 0.0060758 secs] 16961K->3834K(20288K), [Perm : 3144K->3144K(21248K)], 0.0154452 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 
  6. UseParallelGC 功能同UseParNewGC 
  7. UseParallelOldGC 代碼同串行,年輕代、年老代都並行 
0.141: [ GC [PSYoungGen: 1024K->488K(1536K)] 1024K->624K(19968K), 0.0166419 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] 
0.212: [ GC [PSYoungGen: 1012K->504K(1536K)] 16509K->16157K(19968K), 0.0019856 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.215: [ GC [PSYoungGen: 504K->504K(1536K)] 16157K->16181K(19968K), 0.0029741 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.218: [ Full GC [PSYoungGen: 504K->0K(1536K)] [ ParOldGen: 15677K->3810K(18432K)] 16181K->3810K(19968K) [ PSPermGen: 2891K->2890K(21504K)], 0.0133807 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

三、並發
  1. 系統和垃圾回收一起執行,系統不會暫停
  2. 適合於響應要求高的系統,回收時系統不會停止運行
  3. 語法
    1. -XX:+UseConcMarkSweepGC設置年老代為並發收集,年輕代並行,適合於響應要求高的系統
0.206: [GC0.206: [ParNew: 1603K->192K(1856K), 0.0038214 secs]0.210: [CMS: 15945K->3836K(18432K), 0.0084133 secs] 16963K->3836K(20288K), [CMS Perm : 3120K->3119K(21248K)], 0.0123102 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 

Pid is:8008
標記-清除算法
2.217: [GC [1 CMS-initial-mark: 9980K(18432K)] 10450K(20288K), 0.0005452 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.225: [CMS-concurrent-mark-start]
2.239: [CMS-concurrent-mark: 0.014/0.014 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2.239: [CMS-concurrent-preclean-start]
2.240: [CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.240: [GC[YG occupancy: 469 K (1856 K)]2.240: [Rescan (parallel) , 0.0002922 secs]2.241: [weak refs processing, 0.0000111 secs]2.241: [scrub string table, 0.0001527 secs] [1 CMS-remark: 9980K(18432K)] 10450K(20288K), 0.0005009 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.241: [CMS-concurrent-sweep-start]
2.241: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2.241: [CMS-concurrent-reset-start]
2.241: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
 
 
 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM