G1 vs CMS vs平行GC

这篇文章是我们一年前进行的实验的跟进,比较了现实环境中不同GC算法的性能。 我们进行了相同的实验,将测试扩展为包含G1垃圾收集器,然后在不同的平台上运行了测试。 今年,我们的测试使用了以下垃圾收集器:

  • -XX:+ UseParallelOldGC
  • -XX:+ UseConcMarkSweepGC
  • -XX:+ UseG1GC

环境说明

实验是在现成的JIRA配置上进行的。 进行测试的动机非常明确-Minecraft,基于Dalvik的Angry Bird和Eclipse助手JIRA应该是其中最受欢迎的Java应用程序之一。 与替代方案相反,它是我们大多数人在日常业务中处理的更典型的代表–毕竟,到目前为止,服务器端Java EE应用程序中仍然使用最多的Java。

也影响了我们决定的是– Atlassian的工程师在JIRA下载中很好地打包了负载测试 。 因此,我们有一个基准可用于我们的配置。

我们仔细解压缩了最新的JIRA 6.1下载文件,并将其安装在Mac OS X Mavericks上。 并运行捆绑的测试,而不更改默认内存设置中的任何内容。 Atlassian团队非常友善,可以为我们提供服务:

-Xms256m -Xmx768m -XX:MaxPermSize=256m

测试以不同的通用方式使用JIRA功能-创建任务,分配任务,解决任务,搜索和发现任务等。测试的总运行时间为30分钟。

我们使用三种不同的垃圾收集算法进行了测试-在我们的案例中使用了Parallel,CMS和G1。 每次测试均以全新的JVM引导开始,然后将存储预填充为完全相同的状态。 只有在准备工作完成后,我们才开始生成负载。

结果

+ PrintGCTimeStamps -Xloggc:在各试验期间,我们使用-XX收集GC日志/tmp/gc.log -XX:+ PrintGCDetails和分析本次统计的帮助下GCViewer

结果可以汇总如下。 请注意,所有度量单位均为毫秒:

平行 内容管理系统 G1
总GC暂停时间 20930 18870 62 000
最大GC暂停 721 64 50

解释与结果

第一站–并行GC( -XX:+ UseParallelOldGC )。 在完成测试所需的30分钟中,我们用并行收集器在GC暂停上花费了将近21秒。 最长的暂停时间为721毫秒。 因此,让我们以此为基准:GC周期将吞吐量减少了总运行时间的1.1%最坏情况下的延迟是721ms

下一位参赛者:CMS( -XX:+ UseConcMarkSweepGC )。 同样,经过30分钟的测试,我们损失了不到19秒的GC时间。 在吞吐量方面,这与并行模式大致处于同一邻域。 另一方面,延迟得到了显着改善– 最坏情况下的延迟减少了10倍以上! 现在,GC面临的最大暂停时间仅为64毫秒

上一个实验使用了可用的最新最明亮的GC算法– G1( -XX:+ UseG1GC )。 运行了非常相同的测试,并且在吞吐量方面,我们看到结果严重受损。 这次,我们的应用程序花费了超过一分钟的时间来等待GC完成。 与CMS的仅1%的开销相比,我们现在面临的通量影响接近3.5% 。 但是,如果您真的不关心吞吐量,并且想从延迟中挤出最后一点,那么-与已经不错的CMS相比,我们提高了约20% -使用G1可以看到最长的GC暂停仅花费了50ms。

结论

与往常一样,试图将这样的实验总结为一个结论是危险的。 因此,如果您有时间和必要的技能–一定要继续测量自己的环境,而不是采用一刀切的解决方案。

但是,如果我敢于做出这样的结论,我会说CMS仍然是最好的“默认”选项。 G1吞吐量仍然差得多,以至于延迟通常不值得。

参考: Plumbr博客博客上的JCG合作伙伴 Nikita Salnikov Tarnovski的 G1 vs CMS vs Parallel GC 。

翻译自: https://www.javacodegeeks.com/2013/12/g1-vs-cms-vs-parallel-gc.html

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

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

相关文章

html5 video修改默认样式,HTML5中将video设置为背景的方法

主要用到了video标签,css样式,原理是先将video标签利用position:fixed;使video标签脱离文档流,在将他的z-index设置为最低的,比如-9999。再插入的内容自然就覆盖在视频上面了。1.首先,将video插入到网页中,…

hdfs-03-hdfs客户端操作

1, hdfs中两种连接方式 1), 网页 2), 客户端 文件的切块大小和存储的副本数量,都是由客户端决定! 所谓的由客户端决定,是通过配置参数来定的 hdfs的客户端会读以下两个参数,来决定切块大小、副本数量: 切块大小的参数&…

ES6语法的学习与实践

ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常用到的ES6语法做简要的介绍。 1.let,const l…

python闭包的应用场景_简单谈谈Python中的闭包

Python中的闭包 前几天又有人留言,关于其中一个闭包和re.sub的使用不太清楚。我在脚本之家搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善Python的内容。 1. 闭包的概念 首先还得从基本概念说起,什么是闭…

这是一次 docker 入门实践

前言 其实接触 docker 也有一段时间了,但是一直没有做下总结,现在网上关于 docker 的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧。 实现目标 安装 docker ce 探索 docker 基本概念及用法环境准备 Centos7 6…

html dom概念,js学习之HTML DOM的一些基础概念

经过近一个星期,总算把w3chool上的HTML DOM的实例差不多看了一遍,因为本身对其中的很多都用过,所以看起来也很快,现在就再系统的回顾下HTML DOM的一些概念和基础的东西,大部分都是从w3school上看到的什么是DOMDOM是w3c(万维网联盟)的标准DOM定义了访问HTML和XML的标准"W3C…

动态内存(一)

C中,动态内存的管理通过一对运算符来完成: new:在动态内存中为对象分配空间并返回一个指向该对象得指针 delete:接受一个动态对象的指针,销毁该对象,并释放与之关联的内存 说明:new申请的内存位…

DOM基础操作(二)

插入操作 1.appendChild(child); 这个是父级调用的方法,它会将child元素插入到父级里面,而且是放到逻辑后面的位置上。 1 div.appendChild(text); 2 div.appendChild(comment); JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)…

关于Java垃圾收集

本文讨论的是使用的最受欢迎的框架之一带来的开销–我敢打赌,几乎没有应用程序不使用java.util.Collections。 本文基于以下事实:框架为例如集合的初始大小提供了默认值。 因此,我们有一个假设,即大多数人不会费心地自行管理其收…

ansys命令流_ANSYS命令流建模3之划分单元+施加弹簧

以马蹄形隧道为例,本文介绍如何添加荷载等隧道如上图所示!设置线单元材料属性,划分单元(二衬单元)lsel,s,,,1,6 !LSEL,Type,Item,Comp,VMIN, VMAX,VINClATT,1,1,3 !给线单元付材料号、实常数、单元类型号 LATT, MAT, REAL, TYPE, ESYSMSHKEY,1 …

计算机专业多元协同,项目主导多元协同资源开放—软件技术专业人才培养体系的创新实践.pdf...

第九届全国职业院校计算机系主任年会塑 造 I T 职 业 教 育 竞 争 力中国长沙 2018.10.12项目主导、多元协同、资源开放—软件技术专业人才培养体系的创新实践教授,常州信息职业技术学院副校长;眭碧霞 全国工业和信息化职业教育教学指导委员会委员&#…

Linux 系统中用户切换(su user与 su - user 的区别)

1,su命令 (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写,其中l可以省略) 如果不指定USERNAME(用户名),默认即…

正则表达式常用方法

RegExp对象中的方法 1,test()方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。 reg规定匹配以a开头的字符串,利用test进行测试,字符串str满足reg匹配规则…

检查您的REST参数!

我正在进行与正在进行的“项目学生”系列相关的研究,并意识到我犯了最常见的错误,也最容易纠正的错误之一。 我并没有利用我对Web应用程序了解的所有知识来向外扩展我的安全范围。 我正在专门考虑UUID参数。 我知道每个有效的外部可见ID都是UUID。 我知…

python安装哪个版本好啊_windows10安装哪个版本的Python?

python2除了一些大公司历史遗留问题还在使用,目前中小创公司使用最多的是python3 大公司的一些新项目也开始用python3了 目前来说,python3.5以上的版本都可以 目前使用最多的是python3.7(建议你安装这个) 最新的是python3.8&#…

mongose + express 写REST API

一、准备工具 先确保电脑已经安装好nodejs 1.mongoose;安装非常简单: npm install mongoose --save 【mongoose封装了mongodb的方法,调用mongoose的api可以很轻松的对mongodb进行操作】 2.express;npm install express --save …

js实现html模板继承,理解JavaScript中的原型和继承

本文主要讲了原型如何在JavaScript中工作,以及如何通过[Prototype]所有对象共享的隐藏属性链接对象属性和方法;以及如何创建自定义构造函数以及原型继承如何工作以传递属性和方法值。介绍JavaScript是一种基于原型的语言,这意味着对象属性和方…

将.py文件装成这执行文件.exe

目前已知 cx_freeze支持python3生成可执行文件 cx_freeze的操作 参考http://keliang.blog.51cto.com/3359430/661884 转载于:https://www.cnblogs.com/qingsheng/p/9599885.html

python测试脚本截图_selenium + python实现截图并且保存图片

webdriver的截图功能十分强悍,无论页面多长,webdriver都能比较完美的截到完整的页面。 python代码: # -*- coding: utf-8 -*- from selenium import webdriver import unittest import os, sys, time from pathlib import Path # 初始化实例 …

骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...

高通的芯片生意早已不局限于移动设备领域,而是进一步深入至 PC 市场。相比强调性能的 X86 芯片,以高通骁龙为代表的 ARM 系芯片则希望突出自己的优势,即更长的电池续航、无风扇设计和全天候的蜂窝网络连接。在骁龙技术峰会的第三天&#xff0…