`

【Java 8 GC 调优】并发GC(Mostly Concurrent Collector)

    博客分类:
  • Java
 
阅读更多

并发GC 之所以称为“并发”,是因为它的很多操作 与 应用程序的业务 是并发关系。
注意是“很多操作”而不是“所有操作”。所以提到它时会附带“Mostly”,即“Mostly Concurrent Collectors”。

 

Hotspot JDK 8 中 有 2个 并发GC:
 

  • CMS(Concurrent Mark Sweep Collector): 适用于需要更短的GC暂停时间,且可以忍受处理器资源被GC共享 的应用程序
    (其实这是 并发GC 的一般特征,G1 也是这样的。)
     
  • G1(Garbage-First Garbage Collector): 适用于大内存多处理器的机器。它可以在实现高吞吐量目标的同时,高概率满足暂停时间目标

 

并发的开销

并发GC 以处理器资源为代价换取更短的 Major GC 暂停时间(这些处理器资源本可以用于执行应用程序的业务)。
最明显的开销就是在 GC 并发操作期间,它会用到 一个或多个 处理器。
在有 N 个 处理器的系统上,这些并发操作会使用 K/N 个处理器,其中 1<= K <=ceiling{N/4} 。(注意:K 的精度选择和边界可能会更改。)
除了在并发阶段使用处理器外,“启用并发性”也会产生额外的开销。
因此,虽然使用 并发GC 后暂停时间会短得多,但的吞吐量比 其它GC 稍低
 

在多处理器机器上,GC并发阶段期间,业务线程仍然有可用的处理器,所以 并发GC 不会“暂停”应用程序。这个特性最终会表现为“较短的暂停”。但是,再提一次,应用程序可用的处理器资源会减少,而且处理速度会降低,特别是在应用程序业务最大限度地使用所有处理器的情况下。《Concurrent Mark Sweep (CMS)》中的“并发模式失败”讨论了这种“缩减”的潜在限制。
 

因为并发阶段至少要用到一个处理器,所以 并发GC 在单处理器机器上通常没有任何好处。
然而 CMS(不是G1)有一个特殊的模式,可以在只有一个或两个处理器的系统上实现低暂停。
参见《Concurrent Mark Sweep (CMS)》中的“增量模式”。
此特性在 Java SE 8 中被标记为“已废弃”,并且可能在后续的主干版本中被删除。

 

其它参考文献

 

分享到:
评论

相关推荐

    JVM中CMS收集器1

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

    Understanding Java Garbage Collection

    5. 大多数时间并发(Mostly-concurrent)垃圾回收器: 这类垃圾回收器是介于增量回收器和完全并发回收器之间的一种。它的目标是在保证较高吞吐量的同时,减少应用暂停时间。它会在多个垃圾回收周期中,尽可能地减少...

    理解垃圾回收器.pdf

    6. 部分并发(Mostly-concurrent)垃圾回收:这种垃圾回收器尝试在大部分时间中并行工作,只在某些关键点进行短暂的全局停止。 在实际开发中,垃圾回收器的选择和调优是根据应用程序的特点来决定的。例如,对于需要...

    mostly adequate guide

    通过深入学习《Mostly Adequate Guide》,Java开发者不仅可以提升对函数式编程的理解,还能学习到如何将这些概念应用到日常的Java开发工作中,提高代码质量和可维护性。这本书对于任何希望扩展技能树、追求代码优雅...

    mostly-adequate-guide.mobi

    Mostly adequate guide to FP (in javascript)

    mostly-precise-gc:用于 C++ 的大多数精确复制垃圾收集库

    文凭GC C++ 的非保守垃圾收集器。安装: ./autogen.sh 。/配置清洁 | 制作| 进行安装测试: cd 测试/boehmTest 使 LD_LIBRARY_PATH=/usr/local/lib ./output

    wsk_wsk_Driver_mostly8vc_

    标题 "wsk_wsk_Driver_mostly8vc_" 暗示了这是一个关于Windows系统编程中的网络套接字(kernel-mode Socket, WSK)驱动程序的项目,主要使用Visual Studio 8(可能是Visual C++ 2005)进行开发。在微软的Windows ...

    mostly-adequate-guide.pdf

    聪明人都知道,学习函数式编程是很困难的。我自己学了很久也只感觉掌握了皮毛而已(并且这种永远只是略懂的感觉一直挥之不去)。幸运的是,这是一本非常好的教程。 函数式编程的概念里充满着诸如函数演算、代数、...

    mostly-adequate-guide, 对 FP ( 在javascript中)的充分指导.zip

    mostly-adequate-guide, 对 FP ( 在javascript中)的充分指导 关于本书这是一本关于一般功能范例的书。 我们将使用世界上最流行的函数编程语言: JavaScript 。有些人可以能觉得这是一个不好的选择,因为当前区域性的...

    Android代码-jToolkit

    A collection of various utilities, classes and shaders for Java OpenGL GLSL(fixed function pipeline mostly) programming. The sources were originally developed for education pusposes and then I decided...

    hu_LOL云顶之弈循环游戏_LOL_mostly6gp_

    "LOL mostly6gp" 标签可能是指一种特定的阵容或策略,倾向于使用6个格斗家(Grappler)单位。本文将深入解析“云顶之弈”中的循环游戏机制,并探讨"mostly6gp"的玩法。 首先,了解“云顶之弈”的基本规则是至关重要...

    Scala for Java Developers

    This book is obviously targeted mostly for developers. We want to help Java programmers to get started and feel comfortable with both the syntax of the language and the tools. We will achieve this by ...

    Some notes on machine learning algorithms, mostly in Matlab

    在实际应用中,这些知识点是Matlab进行机器学习的基础,开发者需要根据具体问题选择合适的算法和预处理策略,并进行模型调优以提高预测效果。同时,理解和掌握各种算法的数学原理,以及如何在Matlab环境中实现它们,...

    Java到c++的转换程序

    The output will be reasonably valid C++ code that looks alot like its Java counterpart and hopefully works mostly the same.The translation is based on The Java Language Specification, Third Edition, ...

    基于Stata、R、Python和Julia的“Mostly Harmless Econometrics”表格与图表复现设计源码

    本项目是“Mostly Harmless Econometrics”一书中表格与图表的复现源码,涵盖Stata、R、Python和Julia四种编程语言,共计78个文件,包括22个Stata脚本文件(.do)、16个R脚本文件(.r)、12个Python脚本文件(.py)...

    jdk-9.0.1_doc-all 最新版

    Provides charsets that are not in java.base (mostly double byte and IBM charsets). jdk.compiler Defines the implementation of the system Java compiler and its command line equivalent, javac, as well ...

    Matlab functions for wireless communications focussing mostly

    8. **协议栈仿真**:从物理层到应用层,MATLAB可以构建完整的通信系统模型,包括RLC(Radio Link Control)、PDCP(Packet Data Convergence Protocol)等协议层。 9. **性能评估**:如误码率(BER)、吞吐量、时延...

    Language Models (Mostly) Know What They Know.pdf

    语言模型(Mostly)Know What They Know.pdf这篇论文研究了语言模型是否能够评估自己CLAIM的有效性,并预测自己能够正确回答的问题。研究人员设计了一系列实验来测试语言模型的自我评估能力。 首先,研究人员发现,...

    mostly-poplarjs-rest:用于Poplar.js的MostlyJS微服务RESTful处理程序

    用法安装npm install mostly-poplarjs-rest快速范例import express from 'express' ;import bodyParser from 'body-parser' ;import nats from 'nats' ;import mostly from 'mostly-node' ;import poplar from '...

    Mostly Harmless-开源

    《Mostly Harmless》是一款以开源方式开发的空间交易游戏,其设计灵感来源于经典的《Elite》和《Frontier》系列,旨在为玩家提供类似的游戏体验。这款游戏的开发基础是一系列技术工具,包括Chris Laurel的Celestia,...

Global site tag (gtag.js) - Google Analytics