`
yinwufeng
  • 浏览: 286892 次
  • 性别: 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上。

 

分享到:
评论

相关推荐

    04-VIP-JVM垃圾收集器详解1

    ParNew收集器是Serial收集器的多线程版本,同样适用于新生代,使用复制算法,但可以并行执行垃圾收集。默认线程数与CPU核心数相同,可调整。ParNew收集器常与CMS收集器配合使用,是Server模式下的常见选择。 3. ...

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

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

    深入理解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讲 ...

    JVM垃圾收集器全面详解

    ParNew是Serial GC的多线程版本,主要在新生代进行工作,与CMS(Concurrent Mark Sweep)垃圾收集器配合使用,适合多CPU环境。它可以减少暂停时间,但可能会增加CPU使用率。 3. **Parallel GC** Parallel GC也...

    jvm 调优的详细介绍

    - **简介**:ParNew收集器是Serial收集器的多线程版本,适用于多核处理器的环境。 - **算法**:同样采用“复制”算法。 - **特点**:通过多个线程并行执行垃圾收集任务,从而显著减少了GC暂停时间。 - **配置**:...

    垃圾回收器(csdn)————程序.pdf

    例如,-XX:+UseSerialGC会启用串行收集器,而-XX:+UseParNewGC则指定使用ParNew收集器进行年轻代的垃圾回收。 在实际应用中,应根据应用的特性和需求选择合适的垃圾收集器。例如,Serial收集器适用于轻量级应用或...

    JVM讲解视频.zip

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

    JVM中CMS收集器1

    【JVM中的CMS收集器详解】 CMS(Concurrent Mark Sweep)收集器,全称为"Mostly Concurrent Mark and Sweep Garbage Collector",是Java虚拟机(JVM)中一种旨在减少老年代(Old Generation)垃圾回收时停顿时间的...

    J面试-AVA核心知识点整理.pdf

    ParNew收集器实质上就是Serial收集器的多线程版本。 **3.3 Parallel Scavenge收集器** Parallel Scavenge收集器的目标是达到一个可控的吞吐量。 **3.4 Serial Old收集器** Serial Old收集器同样是一个单线程收集...

    JVM常用的GC策略介绍

    ParNew 收集器 **定义与特点**:这是Serial收集器的多线程版本,同样适用于新生代,但在多核处理器环境中表现更佳。 **优缺点**: - **优点**:多线程支持提高了收集速度。 - **缺点**:仍然需要暂停应用程序执行...

    JVM、GC详解及调优

    不同的垃圾收集器有不同的内存分配策略。 4. **垃圾收集**:JVM提供了多种GC算法,如Serial、ParNew、Parallel Scavenge、CMS、G1和ZGC等,它们各有优缺点,适用于不同场景。 **GC详解** 1. **GC目标**:GC的主要...

    垃圾回收相关总结

    - **新生代GC**:新生代主要处理生命周期短的对象,主要包括Serial、Parallel Scavenge和ParNew垃圾收集器。 - **老年代和持久代GC**:针对长期存活的对象,有Serial Old、Parallel Old和CMS(Concurrent Mark ...

    jv m理解以及调优

    **4.3 ParNew收集器** - 使用多线程并行执行垃圾回收,适用于多核处理器环境,提高整体吞吐量。 **4.4 Parallel收集器** - 类似于ParNew,但提供了更多的吞吐量控制选项。 **4.5 G1收集器** - 相对较新的收集器...

    JVM垃圾回收(GC).docx

    2. **ParNew收集器** - Serial收集器的多线程版本。 - 除了多线程外,其余行为与Serial收集器相同。 - 是Server模式下JVM的首选新生代收集器之一。 以上内容详细阐述了JVM中对象回收的相关知识点,包括对象回收...

    jdk 1.6 gc详解

    Java的自动内存管理机制主要依赖于垃圾收集器(Garbage Collector, GC),它负责自动回收不再使用的对象所占据的内存空间。在JDK 1.6版本中,GC的优化和选择对于系统的性能至关重要,尤其是在高并发环境中。本文将...

    jvm调优.zip & hotspot源码解读

    ParNew是新生代的默认收集器,CMS适用于低延迟场景。而G1和ZGC是现代JVM中的先进收集器,它们实现了并行和并发收集,降低了停顿时间。 5. JVM调优工具详解: 工具如JVisualVM、JConsole、JProfiler等提供了丰富的...

    详解JVM的内存对象介绍[创建和访问]

    1. 指针碰撞(Bump the Pointer):使用Serial和ParNew收集器,内存地址是连续的。 2. 空闲列表(Free List):使用CMS收集器和Mark-Sweep收集器,内存地址不连续。 内存分配安全问题 在分配内存的同时,存在线程...

Global site tag (gtag.js) - Google Analytics