点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

在 JDK 9 中 CMS GC 被废弃后,现有应用程序的最佳处理方法是什么?

流行的 CMS( Concurrent Mark Sweep) GC 算法在 JDK 9 中被废弃了。根据 JEP-291 中的说明,为了减轻 GC 代码的维护负担以及加速新功能开发,决定在 JDK9 中废弃CMS GC。

因此,从 Java 9 开始,如果您使用 -XX:+UseConcMarkSweepGC(激活 CMS GC 算法的参数)参数启动应用程序,则会在下面显示警告消息:

Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

为什么 CMS GC 会被废弃?

大家都知道轻装上阵,才能加速前行。CMS GC 也是如此。CMS 是一种高度可配置的复杂算法,因此给 JDK 中的 GC代码库带来了很多复杂性。只有 JDK 开发团队简化了 GC 代码库,他们才能在 GC 领域加速和创新。下表总结了可以传递给每个 GC 算法的 JVM 参数的数量:

JVM 大约有 50 个通用的适合所有所有 GC 算法的参数,除了这 50 个参数之外,仅对于 CMS,您还可以传递 72 个额外的参数。如上表所示,此参数比其他任何 GC 算法都要多得多。因此,可想而知,JDK 团队支持所有这些参数所需的编码复杂性。

如果使用了 CMS,后面该怎么办呢?

就目前来看,其实无非就三种选项:

  1. 切换到 G1 GC 算法

  2. 切换到 Z GC 算法(JDK 11、12 中的早期版本)

  3. 继续使用 CMS

接下来,我们来分析下每个选项。

(1)切换到 G1 GC 算法

自 Java 9 以来,G1 GC 已成为默认的 GC 算法。因此,可以考虑将应用程序的 GC 算法移至 G1。它可能会比 CMS GC 算法有更好的性能表现。调参相对较少,因此调整起来容易得多。此外,它还提供了用于从内存中消除重复的字符串的参数选项。如果可以消除重复的字符串,可以减少总体内存占用也是极好的。

(2)切换到 Z GC 算法

Z GC 是一种可扩展的低延迟垃圾回收器。其目标是使 GC 暂停时间小于 10ms。Java 11 和 12 中提供了对 Z GC 算法的早期版本。因此,如果你的应用程序在 Java 11 或 12 上运行,则可以考虑升级到 Z GC 算法。我们对 Z GC 的做了初步实验,都显示了极好的结果。

(3)继续使用CMS

我们发现,对于某些应用程序经过一些参数优化,CMS GC 可以提供 G1 GC 无法提供的出色结果。因此,如果您已经研究过上面两个选项,并且确信只有 CMS GC 算法就是适合你的应用程序,那么可以考虑继续使用 CMS 算法来运行。在 OpenJDK JDK9-dev 邮件列表中,甚至还有继续让 CMS 保持可用状态 的争论。根据我个人的经验,在 Java 1.1 中已废弃的功能和 API 在 Java 12 中仍然还是存在的(即使 20 年之后)。所有已弃用的 API 和功能似乎都可以保留(并且永远不会消失)。因此,继续在使用 CMS GC 也是一种选择。当然,这完全按照你的需要。

结论

请注意,每个应用程序都是唯一且不同的。因此,不要被在互联网上看到的有关 GC 调优(包括本文)的文章所迷惑。当你测试新的 GC 参数配置时,你需要进行彻底的测试,可以看看基准性能特征,然后再做决定。

英文原文地址:https://dzone.com/articles/cms-deprecated-next-steps

热门内容:

  • 浅谈 CAP 和 Paxos 共识算法

  • 一个丧心病狂的Github项目:东北话编程,大写的服!

  • 一位后端妹纸的面试总结(美团+阿里+携程+58+贝贝+招银+华为+....)

  • 它是谁?一个比 c3p0 快200倍的数据库连接池!

  • 终于放弃了单调的swagger-ui了,选择了这款神器—knife4j

  • Java8中一个极其强悍的新特性,很多人没用过(非常实用)

  • 消灭 Java 代码的“坏味道”

  • 代码生成器:IDEA 强大的 Live Templates

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。

CMS 被废弃了,该怎么办呢?相关推荐

  1. JVM 自动内存管理

    JVM Java 内存区域 虚拟机栈 栈帧的组成 动态分派 栈可能会引发的问题 基于栈的解释执行 本地方法栈 程序计数器 堆 分区 内存分配机制 方法区 元空间与永久区 运行时常量池 直接内存(堆外内 ...

  2. CMS GC:CMS 废弃了,该怎么办呢?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:终于放弃了单调的swagger-ui了,选择了这款神器-knife4j个人原创100W+访问量博客:点击前往,查 ...

  3. 织梦cms/dedecms清理冗余废弃未引用图片方法

    原理描述: 在原有织梦后台菜单中增加"清理冗余图片按钮",实现清理冗余图片的功能. 操作步骤: 1. 打开后台dede\sys_sql_query.php代码 在该文件中搜索如下代 ...

  4. cms是什么意思啊_GC 知识点补充——CMS

    之前已经讲过了不少有关 GC 的内容,今天准备将之前没有细讲的部分进行补充,首先要提到的就是垃圾收集器. 基础的回收方式有三种:清除.压缩.复制,衍生出来的垃圾收集器有: Serial 收集器 新生代 ...

  5. 弄明白CMS和G1,就靠这一篇了

    在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的 ...

  6. 别总说CMS、G1,该聊聊ZGC了

    在开始介绍前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的收集频率较高 ...

  7. JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1

    GC逻辑分类 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本. 从不同角度分析垃圾收 ...

  8. HotSpot VM垃圾收集器——Serial Parallel CMS G1垃圾收集器的JVM参数、使用说明、GC分析

    目录 HotspotVM的垃圾收集器简介 1. Serial Collector 2. Parallel Collector(throughput collector) 3. Concurrent M ...

  9. 安利一个简单快速好用的CMS建站系统

    铭飞CMS系统快速建站 铭飞CMS介绍 码云GVP开源项目:https://gitee.com/mingSoft/MCMS 铭飞官网:http://ms.mingsoft.net/ MCMS可以用来快 ...

最新文章

  1. 北京20-35万Sharepoint Senior Consultant
  2. Layout动画:在android布局发生变化时添加动画效果
  3. MAS 714总复习
  4. Systemctl stop XXX 时间太长
  5. python中content的用法_学python吗,教你5个python现学现用的有趣用法
  6. infinite-scroll学习(二)
  7. 如何使用iMazing开启和平精英的极限帧数
  8. 做一个iframe的弹出框
  9. STM32矩阵键盘——行列扫描编码模式
  10. 2022年计算机一级考试网络安全素质教育模拟试题及答案
  11. 计算机考研复试题目大全
  12. 【openJDK系列3】java OOM 分析(mat工具的使用)
  13. h桥程序控制c语言,H桥电路原理及直流电机驱动编程
  14. 多边形最大内接圆的简单画法
  15. 360安全软件设置白名单
  16. 【uniapp】小程序添加通过卡号查找银行名并添加绑定等逻辑
  17. MapReduce 切片源码中SPLIT_SLOP等于1.1的原因分析(TextInputFormat)
  18. 证明婚内出轨的几种证据
  19. 深度学习方向写会议期刊论文的一些笔记
  20. Gravity bridge——IBC Bridge to Ethereum

热门文章

  1. 【C#技术】一篇文章搞掂:Infragistics组件库
  2. atitit.php中的dwr 设计模式
  3. PHP数组基本的操作方法
  4. 测试,发布,质量保障,用户体验
  5. 从头学起androidlt;AutoCompleteTextView文章提示文本框.十九.gt;
  6. Java5中的线程池实例讲解
  7. PL SQL笔记(三)
  8. Linux 守护进程,编写(转载)
  9. 汽车高级驾驶辅助系统ADAS激光雷达创新者Cepton与Growth Capital达成企业合并协议
  10. Python 玩出花儿,把罗小黑养在自己桌面