`
yinwufeng
  • 浏览: 276083 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ParNew收集器详解

    博客分类:
  • JVM
阅读更多

以下摘自:《深入理解Java虚拟机:JVM高级特性与最佳实践》第3章垃圾收集器与内存分配策略

ParNew收集器其实就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、 -XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、对象分配规则、回收策略等都与Serial收集器完全一样,实现上这两种收集器也共用了相当多的代码。ParNew收集器的工作过程如图3-7所示。

 
(点击查看大图)图3-7 ParNew / Serial Old收集器运行示意图

ParNew收集器除了多线程收集之外,其他与Serial收集器相比并没有太多创新之处,但它却是许多运行在Server模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但很重要的原因是,除了Serial收集器外,目前只有它能与CMS收集器配合工作。在JDK 1.5时期,HotSpot推出了一款在强交互应用中几乎可称为有划时代意义的垃圾收集器—CMS收集器(Concurrent Mark Sweep,本节稍后将详细介绍这款收集器),这款收集器是HotSpot虚拟机中第一款真正意义上的并发(Concurrent)收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作,用前面那个例子的话来说,就是做到了在你妈妈打扫房间的时候你还能同时往地上扔纸屑。

不幸的是,它作为老年代的收集器,却无法与JDK 1.4.0中已经存在的新生代收集器Parallel Scavenge配合工作,所以在JDK 1.5中使用CMS来收集老年代的时候,新生代只能选择ParNew或Serial收集器中的一个。ParNew收集器也是使用 -XX: +UseConcMarkSweepGC选项后的默认新生代收集器,也可以使用 -XX:+UseParNewGC选项来强制指定它。

ParNew收集器在单CPU的环境中绝对不会有比Serial收集器更好的效果,甚至由于存在线程交互的开销,该收集器在通过超线程技术实现的两个CPU的环境中都不能百分之百地保证能超越Serial收集器。当然,随着可以使用的CPU的数量的增加,它对于GC时系统资源的利用还是很有好处的。它默认开启的收集线程数与CPU的数量相同,在CPU非常多(譬如32个,现在CPU动辄就4核加超线程,服务器超过32个逻辑CPU的情况越来越多了)的环境下,可以使用-XX:ParallelGCThreads参数来限制垃圾收集的线程数。

注意  从ParNew收集器开始,后面还将会接触到几款并发和并行的收集器。在大家可能产生疑惑之前,有必要先解释两个名词:并发和并行。这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,他们可以解释为:      并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序继续运行,而垃圾收集程序运行于另一个CPU上。

 

分享到:
评论

相关推荐

    2-6垃圾收集器ParNew&CMS底层三色标记.mp4

    2-6垃圾收集器ParNew&CMS底层三色标记.mp4

    ParNew&CMS垃圾收集器(csdn)————程序.pdf

    ParNew&CMS垃圾收集器(csdn)————程序

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第39节垃圾收集器-parnew收集器详解00:04:53分钟 | 第40节垃圾收集器-parallel收集器详解00:11:02分钟 | 第41节垃圾收集器-cms收集器详解00:14:58分钟 | 第42节最牛的垃圾收集器-g1收集器详解00:18:04分钟 | 第...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第39讲 垃圾收集器-parnew收集器详解 00:04:53  第40讲 垃圾收集器-parallel收集器详解 00:11:02  第41讲 垃圾收集器-cms收集器详解 00:14:58  第42讲 最牛的垃圾收集器-g1收集器详解 00:18:04  第43讲 ...

    并行回收器---新生代ParNew回收器1

    并行回收器---新生代ParNew回收器1

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms.zip

    jvm性能调优-垃圾收集器parnew&CMS底层三色标记算-performance-gc-parnew-cms

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍 1.2JVM参数调优 1.3JVM参数设置思路1.4JVM调优...

    JAVA虚拟机精讲

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew 收集器、Parallel ...

    Java虚拟机精讲.高翔龙.带书签完整版.pdf

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew 收集器、Parallel ...

    JAVA虚拟机精讲 pdf

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew 收集器、Parallel ...

    《剑指offer》JVM面试题总结.pdf

    ParNew 收集器 Parallel Scavenge 收集器 Serial Old 收集器 Parallel Old 收集器 CMS 收集器 Garbage First 收集器 JVM 常用命令介绍 什么是双亲委派模型? 双亲委派模型的缺陷? 双亲委派机制的三次破坏

    07.垃圾回收器1

    1.Serial收集器(串垃圾收集器) 2.ParNew收集器(串多线程垃圾收集器) 3.Parallel Scavenge收集器 4.Serial old收集

    JVM讲解视频.zip

    JVM全套教程视频 ...ParNew垃圾收集器详解 Parallel垃圾收集器详解 CMS垃圾收集器详解 G1垃圾收集器详解 ZGC垃圾收集器详解 三色标记算法 跨代垃圾收集之卡表详解 oJVM调优实战 JDK自带调优

    java虚拟机精讲(电子工业出版社出版)

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析 HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew收集器、Parallel...

    JVM内存与垃圾回收课件.zip

    上篇:内存与垃圾回收篇 中篇:字节码与类的加载篇 垃圾回收的几种常用算法...Jvm的垃圾收集器(serial收集器、parnew收集器、parallel scavenge收集器、serial old 收集器、parallel old收集器、cms收集器、g1收集器)

    【JVM和性能优化】2.垃圾回收器和内存分配策略

    清除算法(Mark-Sweep)复制算法(Copying)标记-整理算法(Mark-Compact)GC算法综合用年轻代老年代永久代枚举根节点安全点安全区域GC回收器Serial 收集器ParNew 收集器Parallel Scavenge 收集器Serial Old 收集器...

    jvm-starter:JVM虚拟机学习之旅

    垃圾收集算法标记 - 清除算法复制算法标记 - 整理算法分代收集算法垃圾收集器Serial收集器:单线程的收集器,收集时必须暂停其它线程(stop the world)ParNew收集器:Serial收集器的多线程版本Parallel Scavenge收集...

    一文了解JVM全部垃圾回收器,从Serial到ZGC

    常用的7种收集器,其适用的范围如图所示Serial、ParNew、ParallelScavenge用于新生代;CMS、SerialOld、ParalledOld用于老年代。并且他们相互之间以相对固定的组合使用(具体组合关系如上图)。G1是一个独立的收集器...

    垃圾收集器优化策略1

    1. UseSerialGC 表示 “Serial” + "Serial Old"组合 2. UseParNewGC 表示 “ParNew” + “Serial

Global site tag (gtag.js) - Google Analytics