Java垃圾收集器:G1GC何时将CMS强制退出?

在针对JDK 9(2017/4/4)提出的JEP中 , Mark Reinhold写道JEP 291 (“弃用并发标记扫描(CMS)垃圾收集器”)是“已被放入“建议的在讨论和审查后,由所有者将其定位为目标”。 如果JEP 291一切顺利,它将针对JDK 9。

Reinhold在此消息中解释了为何在相对较晚的日期仍然可以将JEP 291定位到JDK 9:“ JEP 291仅需要微小的代码更改即可发出建议的警告消息。 首先,这是一个JEP,不是因为这是一个冒险的更改,而是要从长远来看使计划具有可见性,以删除CMS收集器。” 正如这些语句所指出的那样,JDK 9的针对性操作只是将并发标记扫描(CMS)收集器标记为已弃用,其想法是“从长远来看”将在某个时候将其删除。

尽管G1GC是JDK 9到JEP 248的默认垃圾收集器 ,但它并不总是适用于所有情况的最佳垃圾收集器。 甚至不建议使用CMS的提议在其“ 风险和假设 ”中也承认了这一点,其中指出:“对于某些应用程序,CMS非常适合,并且可能总是优于G1。”

关于OpenJDK jdk9-dev邮件列表的另一个最新讨论的标题为“ JEP 291:弃用并发标记扫描(CMS)垃圾收集器”,其中包含有关保留CMS的有趣论点。 Christoph Engelbert(Hazelcast) 写道 :“ CMS + ParNew是最常用的解决方案,并且许多应用程序都针对CMS的行为进行了优化。” 斯科特·帕尔默( Scott Palmer) 写道 ,“在他的特定应用中,“到目前为止,我们发现CMS收集器的最大暂停时间远低于G1。” Roman Kennke(RedHat) 补充说 ,“我说谈论删除CMS还为时过早。 而且,老实说,我什至质疑过时的举动。” Martijn Verburg(jClarity)表示:“我们现在不断被要求为客户调整G1,并且发现,即使使用我们最先进的分析(结合一些常见且更深奥的调整选项),我们也无法使G1达到在某些情况下优于CMS。 因此,一些客户已经恢复使用CMS,并且对CMS的未来(作为消费者)非常感兴趣。”

相同的讨论还包括不建议使用CMS的原因。 马克·雷因霍尔德(Mark Reinhold)的帖子指出,JEP 291是“去年夏天发布的”,并要求提供CMS维护者,但“到目前为止,没有人加紧。” 他总结说,“无论如何,Oracle确实打算在不远的将来停止维护CMS,如果没有人上任,我们将删除代码。”

Jeremy Manson(Google) 解释了G1GC和CMS当前情况的棘手问题:

我们决定,在尝试让G1做我们需要做的事情之后,以任何一种持续的方式支持CMS应该是最后的选择。 我们相信,收藏家越少越好。 在过去的几个月中,我们花了一些时间与Oracle的一些人员进行协调,并进行实验以查看G1是否有可行的前进方法。 我们找不到明显的东西。

这一切的主旨似乎是,许多应用程序仍依赖于CMS,并且这些应用程序将在JDK 9中显示已弃用警告。CMS垃圾收集器的未来似乎令人怀疑,但仅在JDK 9中才会弃用。何时真正删除CMS收集器似乎不太明显,但是我认为JDK 10是潜在的“未来主要发行版”,其中CMS支持可以终止。 再次引用曼森(Google)的话:“简短的是:我们仍然愿意为支持CMS做出贡献,但是我们要确保首先对G1进行了尽职调查。 我们一直认为JDK 10时间框架足够长,因此我们不必着急做出此决定。”

使用JDK9中的并发标记扫描垃圾收集器的Java应用程序似乎将看到有关CMS垃圾收集器已弃用的警告消息。 何时(或是否)根本无法使用CMS不太明显,而取决于谁愿意继续支持CMS。

翻译自: https://www.javacodegeeks.com/2017/04/java-garbage-collectors-will-g1gc-force-cms.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...

一.模块的简介 什么是模块: 模块就是一系列功能的结合体 模块的三种来源: 1.内置的 2.第三方的  3.自定义的 模块的四种表现形式: 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)(***)    2.已被编译为共享库或DLL的C或C扩展…

java dll 乱码_java调用c++ dll出现中文乱码 | 学步园

最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C代码对文件进行操作。在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止。下面用一个小例子,来说明记录下解决的方法。java中传入一个字符串&#x…

每日一问:Android 滑动冲突,你们都是怎样处理的

坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过。 在 Android 开发中,滑动冲突总是我们一个无法避免的话题。而对于解决方案却是众说纷纭。比…

java多线程 cpu分配_java多线程总结(转载)

Java 多线程编程总结-------------------------------------------------------------------------------------------------下面的内容是很早之前写的,内容不够充实,而且是基于Java1.4的内容,Java5之后,线程并发部分扩展了相当多…

java设计模式迭代器模式_迭代器模式和Java

java设计模式迭代器模式大家好,在本文中,我们将检查Iterator Pattern 。 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值。 根据《 Head First Design 》一书: 迭代…

笔记_SQLite入门

1、SQLite是什么? QLite没有单独的服务器进程。 它直接读取和写入普通磁盘文件。 具有多个表,索引,触发器和视图的完整SQL数据库包含在单个磁盘文件中。2、SQLite语法 区分大小写: SQLite不区分大小写。但是,有一些区分…

java线程提交_从Java线程到线程池

线程模型线程模型分为两类,用户级线程(ULT)和内核级线程(KLT)用户级线程(ULT):user level threads,系统内核对ULT无感知,线程的创建和调度都由用户级APP进程管理;即APP自行管理的线程,就是用户级线程内核级…

使用Spring Boot自动发布和监视API

如果您正在沿着微服务风格的架构前进,那么您将需要接受的一个租户就是自动化。 这种架构风格介绍了许多活动部件。 如果成功,您的环境将具有大量服务API,企业可以将其用于应用程序开发和集成。 这意味着必须有一种方法可以发现可用的API文档…

mysql导入导出

导出1.将数据库mydb导出到e:\mysql\mydb.sql文件中:打开开始->运行->输入cmd 进入命令行模式c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。…

mysql 半同步关闭_MySQL的半同步模式配置

1、什么是半同步?在有一台主服务器、多台从服务器的情况下,主服务器只会等待一台从服务器同步数据。2、为什么要使用半同步?在使用同步模式时,数据的写速度太慢。在使用异步模式时,可能会造成从服务器上的现在存储的数…

GIS集成技术之二:数据集成

一。数据驱动。疑惑:ado.net作为一种通用的数据技术,适用与各种格式的文件各种格式的数据库,为一种通用的编程模型。GIS也提出数据集成:毫无疑问,不陷于某击中数据库。因此,我觉得GIS的中心是数据驱动&…

mysql中的replication_mysql中replication的相关问题总结

首先,要使用mysql中的replication,则需要配置master的my.cnf。例如:复制代码 代码示例:server-id 1log_bin mysql-bin#log_bin /var/log/mysql/mysql-bin.logexpire_logs_days 10max_binlog_size 100M#binlog_do_db include_database_na…

rest spring_带有Spring的REST的ETag

rest spring1.概述 本文将重点介绍ETag – Spring支持,RESTful API的集成测试以及带有curl的使用场景。 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web服务的系列文章的第9篇。 REST with Spring系列: 第1部分 …

MySQL最早版本源码_MySQL旧版本升级为新版本

一:从版本3.23升级到4.104.10新特性:支持事务处理和存储过程升级过程的注意事项:1:升级采用直接复制安装文件的方法,简单实用,但要注意相关的配置更改; 2:直接复制备份的数据库不能通过复制的方法恢复&…

关于国产科学软件的思考(转)

转自 http://blog.pfan.cn/eMath/24264.html 作者 爱数学 http://blog.pfan.cn/eMath 原文如下: 这一段一直在问自己这个问题:“在我们常用的科学计算软件当中,有多少国产的?”,在记忆里面搜索了很久,似乎…

每个私有静态方法都是新类的候选人

您是否有私有的静态方法来帮助您将算法分解为更小的部分? 我做。 每次编写新方法时,我都会意识到它可以是一个新类。 当然,我不会从所有课程中选修课程,但这是目标。 私有静态方法不可重用,而类则可重用,这…

448. Find All Numbers Disappeared in an Array

一、题目 1、审题  2、分析 一个整形数组!元素值为 1~size; 出现的元素次数为 1~2 次。 求出所有 1~size 中没有出现的整数! 二、解答 1、思路 由于元素值都为 1~size之间。所以可以将数组下标 index 进行联系。 ① 遍历数组,将出现的元素值…

枚举:如何正确使用name()和toString()方法

两种方法之间的区别? Java枚举有两种方法来检索枚举常量的值: name()和.toString() 。 toString()方法调用name()方法,该方法返回枚举常量的字符串…

gradle maven_Gradle – Maven的观点

gradle maven正如我博客的读者所知道的, 我有点像Maven迷 。 我从2007年8月左右开始使用Maven,从没有回过头。 但是,与其他所有情况一样,“变化是唯一的常数”。 现在这个领域还有其他参与者,Gradle似乎是最有前途的。…

JDK 9中已弃用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 ,我讨论了JDK 9中 Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 。 我在那篇文章中说:“在Java SE API上应用新的…