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{
? ? ? ? ? ? ? Listlist = new ArrayList();
? ? ? ? ? ? ? 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.(EasyParNew.java:12)
? ? atcom.gc.EasyParNew.outOfMemoryByExpansionSize(EasyParNew.java:39)
? ? atcom.gc.EasyParNew.main(EasyParNew.java:14)
Heap
?PSY