JAVA垃圾收集器之Parallel Old收集器,垃圾收集parallel

來源:互聯網
上載者:User

JAVA垃圾收集器之Parallel Old收集器,垃圾收集parallel

Parallel Old收集器是JAVA虛擬機器中垃圾收集器的一種。和Serial Old收集器一樣,工作在JAV虛擬機器的老年代。這種垃圾收集器使用多線程和“標記-整理”演算法。它在JDK 1.6中才開始提供。

在注重輸送量及CPU資源敏感的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器。

1、運行代碼

package com.gc;

 

import java.util.ArrayList;

import java.util.List;

 

/**

 * 簡單的JAVA虛擬機器記憶體回收,parallel old收集器的使用

 * 參數:-Xms30m -Xmx60m-Xmn10m -XX:+UseParallelOldGC -XX:+PrintGCDetails

 * @author 範芳銘

 */

public class EasyParallelOld {

       public byte[] placeHolder =new byte[64 * 1024]; //預留位置

       public static voidmain(String[] args) throws Exception{

              outOfMemoryByExpansionSize();

       }

      

      

       private static voidoutOfMemoryByExpansionSize() throws Exception{

              List<EasyParallelOld>list = new ArrayList<EasyParallelOld>();

              while(true){

                     EasyParallelOldserial = new EasyParallelOld();

                     list.add(serial);

                     Thread.sleep(10);//停頓10毫秒

              }

       }

}

2、參數

-Xms30m -Xmx60m -Xmn10m -XX:+UseParallelOldGC -XX:+PrintGCDetails

-Xms30m  JVM最小30M

-Xmx100m  JVM最大100M

-Xmn10m  新生代固定10M

-XX:+ UseParallelOldGC對應parallel scavenge +parallel old收集器

-XX:+PrintGCDetails 列印詳細GC

 

3、運行結果

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50664K->50664K(51200K)]54058K->54058K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0043610 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50728K->50728K(51200K)]54122K->54122K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0071480 secs][Times: user=0.00 sys=0.00, real=0.01 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50792K->50792K(51200K)]54186K->54186K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0061676 secs][Times: user=0.00 sys=0.00, real=0.01 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50856K->50856K(51200K)]54250K->54250K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0047575 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50920K->50920K(51200K)]54314K->54314K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0044603 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 50984K->50984K(51200K)]54378K->54378K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0041311 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 51048K->51048K(51200K)]54442K->54442K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0042710 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 51112K->51112K(51200K)]54506K->54506K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0044147 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 51176K->51176K(51200K)]54570K->54570K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0044082 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 51176K->51176K(51200K)]54570K->54570K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0044738 secs][Times: user=0.00 sys=0.00, real=0.01 secs]

Exception in thread "main"java.lang.OutOfMemoryError: Java heap space

    atcom.gc.EasyParNew.<init>(EasyParNew.java:12)

    atcom.gc.EasyParNew.outOfMemoryByExpansionSize(EasyParNew.java:39)

    atcom.gc.EasyParNew.main(EasyParNew.java:14)

Heap

 PSYoungGen     total 6848K, used 3456K [0x0ad30000, 0x0b730000, 0x0b730000)

 eden space 3456K, 100% used [0x0ad30000,0x0b090000,0x0b090000)

 from space 3392K, 0% used [0x0b090000,0x0b090000,0x0b3e0000)

 to   space 3392K, 0% used[0x0b3e0000,0x0b3e0000,0x0b730000)

 ParOldGen      total 51200K, used 51176K [0x07b30000, 0x0ad30000, 0x0ad30000)

 object space 51200K, 99% used [0x07b30000,0x0ad2a0a0,0x0ad30000)

 PSPermGen      total 12288K, used 2105K [0x03b30000, 0x04730000, 0x07b30000)

 object space 12288K, 17% used [0x03b30000,0x03d3e4a8,0x04730000)

 

4、和serial Old收集器的差異

serial Old收集器是串列的進行記憶體回收,而Parallel old收集器是並行的進行記憶體回收。

[Full GC [PSYoungGen:3394K->3394K(6848K)] [ParOldGen: 51048K->51048K(51200K)]54442K->54442K(58048K) [PSPermGen: 2084K->2084K(12288K)], 0.0042710 secs][Times: user=0.00 sys=0.00, real=0.00 secs]

[GC [DefNew: 9108K->966K(9216K),0.0049332 secs][Tenured: 46824K->46893K(46920K), 0.0033687 secs] 47800K->47790K(56136K),[Perm : 2086K->2086K(12288K)], 0.0084489 secs] [Times: user=0.02 sys=0.00,real=0.01 secs]

 

ParOldGen表示是Parallel old在老年代進行回收;

Tenured表示是 serial old在老年代進行回收。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.