设为首页 加入收藏

TOP

Java垃圾收集器之ParNew收集器(一)
2015-02-02 14:17:08 来源: 作者: 【 】 浏览:25
Tags:Java 垃圾 收集器 ParNew

1、特点


ParNew收集器是JAVA虚拟机中垃圾收集器的一种。它是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、对象分配规则、回收策略等都与Serial收集器一致。


2、现状


ParNew是许多运行在Server模式下的虚拟机中首选的新生代收集器,在JDK1.6以及之前的版本中,除了Serial收集器外,只有它能与CMS收集器配合工作。


在JDK 1.5时期,HotSpot推出了一款在强交互应用中几乎可称为有划时代意义的垃圾收集器—CMS收集器(Concurrent Mark Sweep,本节稍后将详细介绍这款收集器),这款收集器是HotSpot虚拟机中第一款真正意义上的并发(Concurrent)收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作,用前面那个例子的话来说,就是做到了在你妈妈打扫房间的时候你还能同时往地上扔纸屑。


所以在JDK 1.5中使用CMS来收集老年代的时候,新生代只能选择ParNew或Serial收集器中的一个。ParNew收集器也是使用 -XX:+UseConcMarkSweepGC选项后的默认新生代收集器,也可以使用 -XX:+UseParNewGC选项来强制指定它。


?


3、固定JAVA虚拟机空间


源代码:


package com.gc;


?


import java.util.ArrayList;


import java.util.List;


?


/**


?* 简单的JAVA虚拟机内存回收,parNew收集器的使用


?* 运行参数,见具体方法


?* @author 范芳铭


?*/


public class EasyParNew {


? ? ? public byte[] placeHolder =new byte[64 * 1024]; //占位符


? ? ? public static void main(String[]args) throws Exception{


? ? ? ? ? ? ? outOfMemoryByFixSize();


? ? ? }


? ? ?


? ? ? /**


? ? ? ? * 固定JAVA虚拟机的大小


? ? ? ? * 参数:-Xms30m -Xmx30m-Xmn10m -XX:+UseParNewGC -XX:+PrintGCDetails


? ? ? ? * @author 范芳铭


? ? ? ? */


? ? ? private static voidoutOfMemoryByFixSize() throws Exception{


? ? ? ? ? ? ? Listlist = new ArrayList();


? ? ? ? ? ? ? while(true){


? ? ? ? ? ? ? ? ? ? EasyParNewserial = new EasyParNew();


? ? ? ? ? ? ? ? ? ? list.add(serial);


? ? ? ? ? ? ? ? ? ? Thread.sleep(10);//停顿10毫秒


? ? ? ? ? ? ? }


? ? ? }


? ? ?


? ? ? /**


? ? ? ? * JAVA虚拟机的大小适当可扩展,其中Xms30m,Xmx40m


? ? ? ? * 参数:-Xms30m -Xmx40m-XX:+UseParNewGC -XX:+PrintGCDetails


? ? ? ? * @author 范芳铭


? ? ? ? */


? ? ? private static voidoutOfMemoryByExpansionSize() throws Exception{


? ? ? ? ? ? ? Listlist = new ArrayList();


? ? ? ? ? ? ? while(true){


? ? ? ? ? ? ? ? ? ? EasyParNewserial = new EasyParNew();


? ? ? ? ? ? ? ? ? ? list.add(serial);


? ? ? ? ? ? ? ? ? ? Thread.sleep(10);//停顿10毫秒


? ? ? ? ? ? ? }


? ? ? }


}


参数:


-Xms30m -Xmx30m -Xmn10m -XX:+UseParNewGC -XX:+PrintGCDetails


其中,-XX:+UseParNewGC 表示要强制使用parNew收集器在新生代回收空间。


运行结果:


[GC [ParNew: 8137K->980K(9216K),0.0057214 secs] 8137K->8022K(29696K), 0.0057563 secs] [Times: user=0.01sys=0.00, real=0.01 secs]


[GC [ParNew: 9131K->1021K(9216K),0.0058799 secs] 16173K->16215K(29696K), 0.0059148 secs] [Times: user=0.00sys=0.00, real=0.01 secs]


[GC [ParNew: 9207K->9207K(9216K),0.0000123 secs][Tenured: 15194K->20447K(20480K), 0.0071258 secs]24401K->24289K(29696K), [Perm : 2086K->2086K(12288K)], 0.0071911 secs][Times: user=0.00 sys=0.00, real=0.01 secs]


[Full GC [Tenured:20447K->20447K(20480K), 0.0038141 secs] 29576K->29543K(29696K), [Perm :2086K->2086K(12288K)], 0.0038490 secs] [Times: user=0.00 sys=0.00, real=0.00secs]


[Full GC [Tenured:20447K->20436K(20480K), 0.0063466 secs] 29543K->29532K(29696K), [Perm :2086K->2084K(12288K)], 0.0063865 secs] [Times: user=0.00 sys=0.00, real=0.01secs]


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


? ? atcom.gc.EasyParNew.(EasyParNew.java:12)


? ? atcom.gc.EasyParNew.outOfMemoryByFixSize(EasyParNew.java:25)


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


Heap


?par new generation? total 9216K, used 9152K [0x03c10000,0x04610000, 0x04610000)


?eden space 8192K, 100% used [0x03c10000, 0x04410000, 0x04410000)


?from space 1024K,? 93% used[0x04410000, 0x045000f0, 0x04510000)


?to? space 1024K,? 0% used [0x04510000, 0x04510000, 0x04610000)


?tenured generation? total 20480K, used 20436K [0x04610000,0x05a1000

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java垃圾收集器之Parallel Scaven.. 下一篇Java垃圾收集器之Serial收集器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: