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

Parallel Scavenge收集器详解

    博客分类:
  • JVM
 
阅读更多

Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器,又是并行的多线程收集器……看上去和ParNew都一样,那它有什么特别之处呢?

Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间),虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。

停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。

Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数以及直接设置吞吐量大小的-XX:GCTimeRatio参数。

MaxGCPauseMillis参数允许的值是一个大于0的毫秒数,收集器将尽可能地保证内存回收花费的时间不超过设定值。不过大家不要认为如果把这个参数的值设置得稍小一点就能使得系统的垃圾收集速度变得更快,GC停顿时间缩短是以牺牲吞吐量和新生代空间来换取的:系统把新生代调小一些,收集300MB新生代肯定比收集500MB快吧,这也直接导致垃圾收集发生得更频繁一些,原来10秒收集一次、每次停顿100毫秒,现在变成5秒收集一次、每次停顿70毫秒。停顿时间的确在下降,但吞吐量也降下来了。

GCTimeRatio参数的值应当是一个大于0且小于100的整数,也就是垃圾收集时间占总时间的比率,相当于是吞吐量的倒数。如果把此参数设置为19,那允许的最大GC时间就占总时间的5%(即1 /(1+19)),默认值为99,就是允许最大1%(即1 /(1+99))的垃圾收集时间。

由于与吞吐量关系密切,Parallel Scavenge收集器也经常称为“吞吐量优先”收集器。除上述两个参数之外,Parallel Scavenge收集器还有一个参数-XX:+UseAdaptiveSizePolicy值得关注。这是一个开关参数,当这个参数打开之后,就不需要手工指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomics)。如果读者对于收集器运作原来不太了解,手工优化存在困难的时候,使用Parallel Scavenge收集器配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成将是一个不错的选择。只需要把基本的内存数据设置好(如-Xmx设置最大堆),然后使用MaxGCPauseMillis参数(更关注最大停顿时间)或GCTimeRatio(更关注吞吐量)参数给虚拟机设立一个优化目标,那具体细节参数的调节工作就由虚拟机完成了。自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

分享到:
评论

相关推荐

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

    3. Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代)) Parallel Scavenge收集器关注的是系统的吞吐量,而非最小化停顿时间。它提供了多个参数以调整停顿时间和吞吐量之间的...

    jvm 调优的详细介绍

    - **简介**:ParallelScavenge收集器注重的是CPU的吞吐量,适用于后台处理任务较多的应用场景。 - **算法**:使用“复制”算法。 - **特点**:通过调整垃圾收集的频率,最大化CPU的利用率。 - **配置**:通过`-XX:+...

    垃圾回收相关总结

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

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

    Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程并行的方式完成垃圾收集。 **3.6 CMS收集器** CMS收集器是一种以获取最短回收停顿时间为目标的收集器。它非常适合在注重交互体验的应用系统...

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

    并行收集器如ParNew和Parallel Scavenge利用多核优势提高吞吐量,而并发收集器如CMS和G1则在垃圾收集时允许应用程序继续运行,减少了STW的影响。G1是一款整堆收集器,能够跨新生代和老年代进行垃圾回收,旨在平衡...

    JVM常用的GC策略介绍

    ParallelScavenge收集器用于新生代,ParallelOld收集器用于老年代,均采用多线程和标记-整理算法。 **优缺点**: - **优点**:提高了系统的整体吞吐量。 - **缺点**:配置较为复杂,可能会影响响应时间。 ##### 4....

    java内存分配 .pdf

    - **Parallel Scavenge收集器**:并行的年轻代垃圾收集器,专注于达到一个可控制的吞吐量。 - **Serial Old收集器**:单线程的老年代垃圾收集器,适用于小内存的应用场景。 - **Parallel Old收集器**:并行的老年代...

    JVM、GC详解及调优

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

    jdk 1.6 gc详解

    新生代的GC策略有串行GC(Serial Copying)、并行回收GC(Parallel Scavenge)和ParNew GC。 串行GC是客户端模式下的默认选择,可以通过`-XX:+UseSerialGC`指定。它使用单线程进行垃圾收集,适合小型应用。新生代的...

    jdk1.6 旧版jdk1.6

    例如,Parallel Scavenge和Parallel Old收集器组合提供了更好的吞吐量。 7. **XML处理**:JAXB 2.1引入了XML数据绑定,使得Java对象可以直接映射到XML文档,简化了XML处理。 8. **JMX增强**:Java Management ...

    jdk1.6安装包.zip

    例如,Parallel Scavenge和Parallel Old垃圾收集器的组合在多线程环境中提供了更好的性能。 2. **增强的Swing组件**:Java 1.6对Swing UI库进行了升级,提供了更丰富的图形效果和用户体验,如LookAndFeel的改进和...

    JDK6 API.zip

    10. **垃圾收集优化**: 垃圾收集器进行了改进,如Parallel Scavenge和Parallel Old收集器,提升了系统性能。 **总结** JDK6 API文档是Java开发者的宝贵资源,详细阐述了每一个类和方法的用法,是理解和使用Java...

    JVM面试思考准备.zip

    - **垃圾收集器**:如Serial、ParNew、Parallel Scavenge、CMS、G1等,各有优缺点。 5. **内存溢出与性能优化**: - **堆内存溢出**:过多对象未被及时回收,可以通过调整新生代和老年代比例、增大堆大小等解决。...

    JDK1.6_EN.rar

    - **Garbage Collection优化**:引入了 Parallel Scavenge 和 Parallel Old 垃圾收集器组合,针对不同场景提供更好的内存管理。 - **JNI(Java Native Interface)改进**:优化了JNI调用,降低了与本地代码交互的...

    jvm视频教程2020最新.rar

    关于JVM的垃圾收集,课程会详细讲解不同的垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS、G1以及ZGC等,分析各自的优缺点以及适用场景。同时,也会探讨新生代与老年代的垃圾回收策略,如复制算法、标记-...

    JDK内存管理

    - **并行收集器**:包括 Parallel Scavenge (PS) 和 Parallel Old (ParOld) 等。 - **特点**:使用多个 CPU 或者 CPU 内核同时进行垃圾回收工作,大大提高了垃圾回收的效率。 - **并发收集器**:例如 Concurrent ...

    jdk-7-windows-x32

    1. **多线程并行GC(Garbage Collector)优化**:JDK 7对垃圾回收器进行了改进,特别是Parallel Scavenge和Parallel Old收集器,提高了内存管理效率,降低了应用程序的停顿时间。 2. **类型推断(Type Inference ...

    JVM工作原理

    JVM还提供了各种垃圾收集器组合,如Serial、ParNew、Parallel Scavenge、CMS、G1等,以适应不同的应用场景。 5. **类加载机制** 类加载机制遵循“双亲委托模型”,当加载一个类时,会先尝试从父加载器加载,如果父...

    Jdk新特性教程吐血整理干货.md

    - **收集器组合**:Java 14 弃用了 ParallelScavenge 和 SerialOld 的组合,因为这可能导致不理想的性能表现。 #### 展望 - **ZGC**:ZGC 是 Java 11 中引入的一个新的垃圾收集器。它设计用于减少 GC 暂停时间,...

Global site tag (gtag.js) - Google Analytics