您正在使用什么垃圾收集器?

我们的研究实验室正全速前进。 随着最近的资金注入 ,我们只能保证我们不断创新的步伐只会加快。 我们进行的部分研究与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/366849.shtml

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

相关文章

基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...

基于混沌的图像置乱加密算法及MATLAB的实现提出了一种基于混沌映射的图像置乱加密算法。借助MATLAB6.5软(本文共3页)阅读全文>>数字水印(Digital Watermark)技术属于国际上新兴的研究领域,其主要目的是为了实现数字作品的版权保护,将与作品内容相关或不相关的一些标示信息…

poj1857 To Europe! To Europe!

思路&#xff1a; 一维dp。 实现&#xff1a; 1 #include <cstdio>2 #include <iostream>3 using namespace std;4 const int INF 0x3f3f3f3f;5 int w[1005], v[1005], sum[1005];6 double dp[1005];7 int main()8 {9 int b, l, n; 10 while (cin >>…

前端布局推进剂 - 间距规范化

我是一个爱折腾设计的前端&#xff0c;一直都在标榜自己的页面还原是多么的牛 X 。怎么做到页面还原&#xff1f;我有一个最笨但是有效的方法&#xff0c;就是把设计稿直接存成图片&#xff0c;作为背景图然后临摹着设计稿进行开发。我觉得自己太有才了。像素级还原有没有&…

战略模式并不意味着春天!

是的&#xff0c;所以可以说您正在编写一个Spring MVC应用程序&#xff0c;然后您决定&#xff1a;“我想做一些单独的封装算法&#xff0c;这些算法可以互换来执行特定的行为”。 对此的经典回应是“您需要一个战略模式男孩&#xff01;”。 所以&#xff0c;这就是我所做的&…

echarts折线图相关

optionJKDLine {  title: {text: 告警数量趋势图,textStyle:{  //标题样式fontStyle:normal,fontFamily:sans-serif,fontSize:12    }},tooltip: {trigger: axis},legend: {  //图例,默认显示},grid: {  //图表距离left: -3%,right: 5%,bottom: 3%,top:20%,contai…

南邮java实验报告,南邮微机原理实验报告精选.doc

南邮微机原理实验报告精选《微型计算机原理与接口技术》上机实验学 院&#xff1a; 电子科学与工程专 业&#xff1a; 电磁场与无线技术姓 名&#xff1a; 陈秀慧课 程 号&#xff1a; B0300062S学 号&#xff1a;任课老师&#xff1a; 欧晓鸥2016年 3 月 21日实验目的熟悉第四…

Mybatis动态SQL语句使用

在实际开发中&#xff0c;有时候查询条件可能是不确定的&#xff0c;查询条件可能有多条也可能没有&#xff0c;这时候就需要用到动态的sql语句拼接功能。 一、if、where、sql标签的使用 需求&#xff1a;在一些高级查询中&#xff0c;查询条件存在的个数不确定。如&#xff0c…

为什么Vue不能观察到数组length的变化?

官网解释如下 由于 JavaScript 的限制&#xff0c;Vue 不能检测以下变动的数组&#xff1a; 当你利用索引直接设置一个项时&#xff0c;例如&#xff1a;vm.items[indexOfItem] newValue 当你修改数组的长度时&#xff0c;例如&#xff1a;vm.items.length newLength 因为vue…

规则引擎drools的简单使用

规则引擎适用于有复杂多变的规则&#xff0c;如商品满减、积分赠送、考勤规则等 一、引入maven依赖 <dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.13.0.Final</version> </depende…

使用MongoDB进行乐观锁定重试

在我以前的文章中&#xff0c;我谈到了对MongoDB批处理程序采用乐观锁定的好处。 如我之前所写&#xff0c;乐观锁异常是可恢复的异常&#xff0c;只要我们获取最新的Entity&#xff0c;我们就会对其进行更新并保存。 因为我们使用的是MongoDB&#xff0c;所以我们不必担心本地…

cx oracle 配置,cx_Oracle的配置啊。。终于搞出来了

参考。。http://www.blogjava.net/jelver/articles/294583.htmlhttp://shanchao7932297.blog.163.com/blog/static/1363624200710911543428/http://aofengblog.blog.163.com/blog/static/6317021201157111336764/http://www.cnblogs.com/ysisl/archive/2010/12/20/1911870.html…

JavaScript中发布/订阅模式的理解

订阅发布模式的介绍 发布订阅模式&#xff0c;它定义了一种一对多的关系&#xff0c;可以使多个观察者对象对一个主题对象进行监听&#xff0c;当这个主题对象发生改变时&#xff0c;依赖的所有对象都会被通知到。 在生活中我们常常遇到这样一种情况&#xff0c;我们在使用新…

java的list遍历

for(String str : list) {//增强for循环&#xff0c;其内部实质上还是调用了迭代器遍历方式&#xff0c;这种循环方式还有其他限制&#xff0c;不建议使用。System.out.println(str); } for( int i 0 ; i < list.size() ; i) {//普通for循环&#xff0c;内部不锁定&#xf…

Spring Data Solr入门

Spring Data Solr是Spring Data项目的扩展&#xff0c;该项目旨在简化Apache Solr在Spring应用程序中的使用。 请注意&#xff0c;这不是Spring&#xff08;数据&#xff09;或Solr的简介。 我认为您至少对这两种技术都有一些基本的了解。 在下面的文章中&#xff0c;我将展示如…

一个关于fixed抖动的小bug

前言 大家都知道position: fixed用于生成绝对定位的元素&#xff0c;相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 突然发现自己之前写的网页有个小bug&#xff1a;在购买页面的…

BBS论坛(十八)

18.首页轮播图实现 &#xff08;1&#xff09;front/css/front_base.css .main-container{width: 990px;margin: 0 auto;overflow: hidden; } .lg-container{width: 730px;float:left; } .sm-container{width: 250px;float:right; } &#xff08;2&#xff09;front_base.html …

eureka-7-多网卡下的ip选择

目前没有需求,后面需要的话&#xff0c;再补充 只是简单使用的话&#xff0c;只需要指定ip即可 eureka.instance.ip-address:127.0.0.1转载于:https://www.cnblogs.com/wenq001/p/9884591.html

Java DB中的Java用户定义类型(UDT)

Java DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 用户定义类型&#xff08;UDT&#xff09;是Java类&#xff0c;其实例&#xff08;对象&#xff09;存储在数据库表列中。 UDT定义为…

php 字符串与数字相加,注意!PHP中字符串与数字的比较

在日常开发过程中&#xff0c; 运算符是我们每天都会接触到的。这个运算符中其实埋了非常多的坑&#xff0c;今天我们就来看下字符串和数字用比较需要注意的问题。首先来看看这些代码&#xff1a;echo "1234" " 1234" is . (1234 1234), PHP_EOL;echo …

腾讯Node.js基础设施TSW正式开源

经过六年的迭代与沉淀&#xff0c;腾讯Tencent Server Web (以下简称TSW)这一公司级运维组件于今日正式开源。TSW是面向WEB前端开发者&#xff0c;以提升问题定位效率为初衷&#xff0c;提供云抓包、全息日志和异常发现的Node.js基础设施。TSW每天为百亿次请求提供稳定服务&…