垃圾收集算法,垃圾收集器_您正在使用什么垃圾收集器?

垃圾收集算法,垃圾收集器

我们的研究实验室正全速前进。 随着最近的资本注入 ,我们只能保证我们不断创新的步伐只会加快。 我们进行的部分研究与GC优化有关。 在处理这个有趣的领域中的问题时,我们认为可以分享一些有关GC算法使用的见解。

为此,我们对使用特定GC算法的频率进行了研究。 结果有些令人惊讶。 让我从数据的背景开始–我们可以访问来自84,936个会话的数据,这些会话代表2670种不同的环境用于研究。 13%的环境明确指定了GC算法。 其余的决定权交给了JVM。 因此,在使用显式GC算法的11,062会话中,我们能够区分出六种不同的GC算法:

gc-算法-流行度

在了解有关GC算法用法的详细信息之前,我们应该停一分钟,然后尝试理解为什么上面的饼图中缺少87%的运行。 我们认为,这是两个不同根本原因的征兆

  • 首先也是有充分理由的是– JVM在选择合理的默认值方面已经表现出色,以至于开发人员不再需要深入研究。 如果您的应用程序吞吐量和延迟足够,那么–为什么要打扰?
  • 缺少GC算法的第二个可能原因表明,应用程序性能并不是团队的首要任务。 正如我们去年的案例研究所表明的那样,仅需调整一项配置即可显着提高吞吐量和延迟。

因此,我们有将近83,000个使用默认GC选择运行的JVM。 但是默认值是什么? 答案既简单又复杂。 如果认为您正在客户端JVM上运行,则JVM所应用的默认值为串行GC(-XX:+ UseSerialGC)。 在服务器级计算机上,默认值为并行GC(-XX:+ UseParallelGC)。 可以基于以下决策表确定是在服务器还是客户端类计算机上运行:

建筑 CPU /内存 操作系统 默认
i586 任何 微软视窗 客户
AMD64 任何 任何 服务器
64位SPARC 任何 的Solaris 服务器
32位SPARC 2个以上内核和> 2GB RAM 的Solaris 服务器
32位SPARC 1核或<2GB RAM 的Solaris 客户
i568 2个以上内核和> 2GB RAM Linux或Solaris 服务器
i568 1核或<2GB RAM Linux或Solaris 客户

但是,让我们回到在配置中已明确指定GC算法的13%的人。 它以良好的旧串行模式开始,毫无疑问,它的用户群如此之小,以至于在上图中几乎看不到它。 实际上,只有31个环境确定这是最佳的GC算法,并且已明确指定了该算法。 考虑到当今大多数平台都在多核计算机上运行,​​您应该不会感到惊讶–当您拥有多个核时,几乎总是建议从串行模式切换。

GC 计数
序列号 31
平行 1,422
平行旧 1,193
ConcMarkSweep 6,655
CMSIncrementalMode 935
G1 826

其余配置可以分为三组-并行,并发和G1。 赢家是显而易见的-并发标记和扫描算法相结合构成了样本的三分之二以上。 但是,让我们更深入地研究结果。

Parallel和ParallelOld模式大致在同一邻域中,具有1,422和1,193个样本。 不足为奇–如果您确定并行模式适合您的年轻一代,那么对于老一代而言,相同的算法通常也表现良好。 并行模式中另一个有趣的方面是–从上面可以看出,并行模式是大多数常见平台上的默认模式,因此缺乏明确的规范并不意味着它不比其他模式流行。

对于CMS,我们的期望有所不同。 即–与具有6556种配置的传统CMS相比,增量模式仅在935次打开。 提醒您-在并发阶段,垃圾收集器线程正在使用一个或多个处理器。 增量模式用于通过定期停止并发阶段以使处理器退还给应用程序来减少长时间的并发阶段的影响。 这样可以缩短暂停时间,尤其是在处理器数量少的机器上。 目前尚不清楚环境是全部拥有海量核心,还是负责配置的人员都不知道增量模式的好处。

但是我们最大的惊喜与G1的采用率有关。 G1作为垃圾收集算法正在运行826个环境。 根据我们的经验,无论您是追求吞吐量还是等待时间,G1的表现都比CMS差。 也许我们可以访问的测试用例的选择不多,但是目前我们认为G1需要更多的时间来实际兑现其承诺。 因此,如果您是快乐的G1用户,也许可以与我们分享您的经验?

参考: 您正在使用什么垃圾收集器? 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。

翻译自: https://www.javacodegeeks.com/2013/11/what-garbage-collector-are-you-using.html

垃圾收集算法,垃圾收集器

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

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

相关文章

与时俱进:在JAX-RS API中采用OpenAPI v3.0.0

看到时间流逝真是太恐怖了&#xff01; OpenAPI规范3.0.0是对Swagger规范的重大修改&#xff0c;大部分已于一年前发布&#xff0c;但是工具赶上了一段时间。 但是&#xff0c;随着Swagger Core 2.0.0的最新正式发布&#xff0c;事情肯定会加速。 为了证明这一点&#xff0c;著…

Cpp类虚成员函数指针的用法

普通类成员函数指针 先定义一个公鸡类Cock&#xff0c;只有一个函数Shout&#xff0c;功能是输出一个字符串。 接着定义函数指针类型PFN_Shout。 main函数中代码PFN_Shout pfn_Shout &Cock::Shout;和void (Cock:: * pfn_Shout)() &Cock::Shout;的功能相同&#xf…

通过引入switch表达式来增强Java switch语句

去年12月下旬&#xff0c;我发布了“ Switch Expressions Coming Java&#xff1f; 从那时起&#xff0c;进行了广泛的讨论&#xff0c;表达了意见分歧&#xff0c;现在就Java的switch表达式的未来达成了共识。 我曾尝试在12月的博客文章中评论与switch表达式有关的一些主要发展…

jclouds_jclouds的命令行界面

jclouds序幕 我使用和为jclouds贡献了一年多的时间。 到目前为止&#xff0c;我已经在很多领域广泛使用了它&#xff0c;尤其是在Fuse生态系统中 。 它的强大之处在于它缺少一件事&#xff0c;该工具可用于管理jclouds也提供访问权限的任何云提供商。 类似于EC2命令之类的工具&…

用于从文件读取/写入字符串的新JDK 11文件方法

我之前的文章主要关注可能会添加到JDK 11中的Files.isSameContent()方法。 JDK-8201276 [“&#xff08;fs&#xff09;向文件添加方法以从文件读取字符串或向文件写入字符串”]提到了此新方法&#xff0c;并重点介绍了本文的主题&#xff1a; readString(Path) readString(P…

【数字信号处理】离散傅里叶级数(DFS)

周期信号的DFS 周期信号一定 不存在 离散傅里叶变换,通过引入冲激序列,可以进行表示,使得数学运算更加严谨;但一定存在傅里叶级数! 时域周期==>频域离散 时域离散==>频域周期 时域又离散又周期==>频域又周期又离散 联系序列的傅里叶变换DFT理解即可,只不过复指…

java对响应数据做封装_1000种对Java的响应没有死

java对响应数据做封装当一篇评论发表1000条评论时&#xff0c;值得考虑一下。 上周我的社论“ 如果Java即将死&#xff0c;它肯定看起来非常健康 ”在各个开发人员社区中都感到不安 。 在Reddit&#xff0c;Hacker News和Slashdot之间&#xff0c;它收到了1000多个评论。 奇怪…

了解自定义对象创建:JSON绑定概述系列

让我们看一下JSON绑定如何处理自定义对象的创建。 本系列的下一篇文章将介绍如何使用适配器自定义JSON-B。 JSON-B期望所有类都具有一个公共的无参数构造函数 &#xff0c;该构造函数在反序列化过程中用于实例化目标类。 创建实例后&#xff0c;可通过调用适当的setter方法或…

【数字信号处理】应用FFT计算线性卷积

线性卷积的运算量 DFT的应用方向 一是计算卷积,二是频谱分析,该博客主要讨论前者。通常,信号过系统需要计算卷积,假设 h ( n ) h(n) h(n)的长度为 N N

锁具行业电子工程师岗位职责_赏金猎人招募电子产品开发工程师产品结构工程师...

“赏金猎人”专栏6期来啦&#xff01;这个专栏&#xff0c;可以让产业需求被更广大的社区看见让社区更多有技能、有解决方案的小伙伴参与进来最终促进科技在传统产业中的应用落地专栏里面发布的猎人需求只要你觉得具备欢迎通过businesschaihuo.org跟我们取得联系今天要发布的是…

hash和hashcode_Hibernate事实:等于和HashCode

hash和hashcode每个Java对象都继承了equals和hashCode方法&#xff0c;但它们仅对Value对象有用&#xff0c;对面向无状态行为的对象没有用。 尽管使用“ ”运算符比较引用很简单&#xff0c;但是对于对象相等而言&#xff0c;事情要复杂一些。 由于您负责告诉平等性对于特定…

4代hiv检测50元_别瞧不起国货!这4个姥姥辈的护肤品,真心好用,还不到50元

在护肤这件事情上&#xff0c;其实最适合我们肤质的护肤品还是我们自己国家的生产的&#xff0c;但是国货这几年的确没有欧美的一些大牌&#xff0c;或者是日韩的护肤品更受到欢迎&#xff0c;国货被淹没的一个主要原&#xff0c;就是因为它的价格太过便宜了&#xff0c;可能老…

了解自定义De / Serializer:JSON绑定概述系列

自定义JSON绑定的最高级方法是使用自定义序列化程序和反序列化程序。 JSON-B序列化器和反序列化器是可用的最低级别的自定义&#xff0c;并且可以访问JSON处理解析器和生成器。 定制的序列化程序必须实现JsonbSerializer接口&#xff0c;并为serialise&#xff08;&#xff0…

墙面有几种装修方法_新房装修除甲醛 用这几种方法就足够

新房装修后会散发出刺鼻的有害物质&#xff0c;其中甲醛是含量最高&#xff0c;危害最大的有害气体。那怎么才能有效的去除甲醛呢?下面小编就为大家带来新房装修除甲醛的四大方法&#xff0c;希望能给大家带来帮助。新房装修除甲醛方法一&#xff1a;开窗通风法将新房的窗户打…

Parallel Parking of Truck-Trailer Using Multistage Nonlinear MPC之MATLAB simulink编译转换C++代码(内附下载地址)

引言 这个例子展示了如何使用多级非线性模型预测控制(NLMPC)来并行停放卡车-挂车系统。 在本例的应用场景中,卡车-拖车系统(EGO车辆)在停车场行驶。当停车点被定位时,非线性预测控制规划器生成停车路径。然后,自行车使用另一个非线性MPC控制器,沿着规划的路径到达目标姿态…

lambda 加和_流畅和稳定的API的Lambda

lambda 加和几周前&#xff0c;我写了关于Java 8 lambda的介绍 。 在本简介中&#xff0c;我解释了什么是lambda以及如何将它们与Java 8中也引入的新Stream API结合使用。 Stream API为集合提供了更实用的接口。 此接口在很大程度上取决于lambda。 但是&#xff0c;lambda不仅…

攻防世界 适合做桌面_空间“狭小”的二人世界,适合情侣们做浪漫的事情

在最浪漫的11月与它邂逅&#xff0c;有着深秋的枫红、累累的苹果红、还有童话绘本中的苹果屋红&#xff0c;充满着热情活力的色彩&#xff0c;让人感到雀跃。眼瞧见银河的感动。那晚入住于福寿山农场的露营区&#xff0c;位在深山中的它空气轻透又鲜少光害&#xff0c;是观赏星…

使用混合多云每个人都应避免的3个陷阱(第1部分)

每天都在肆意宣传云&#xff0c;但每个人都应避免三个陷阱。 从云&#xff0c;混合云到混合多云&#xff0c;您被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&#xff0c;仔细研…

jquery开关灯案例_全屋开关插座布局讲解,自己规划怕遗漏,手把手教你,很详细...

开关插座是装修内重要的一环&#xff0c;然而也最容易被忽视。装修完住进来后才发现插口不够用&#xff0c;插座被家具挡住&#xff0c;想改还得砸墙&#xff0c;没办法只能用拖线板。然而&#xff0c;满屋都是拖线板&#xff0c;乱糟糟的&#xff0c;看着就惹人烦&#xff0c;…

富贵不压重发_为什么老人常说“贵人不顶重发”,“重发”是什么意思? ?...

"先&#xff0c;""贵人""在我国一般是指有身份有地位有财富的人&#xff0c;而""重发""顾名思义是指头发多的人&#xff0c;那么&#xff0c;老人们为什么会说""贵人不顶重发""呢?有书君认为&#xff0c;可…