|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。这篇文章恰好接上前一年我们做的一次实际情况下分歧GC算法功能对照的实验。此次我们仍旧举行一样的实验,不外增添了对G1接纳器的测试,而且在多个平台举行测试。往年我们测试的渣滓接纳器有以下几个:
- -XX:+UseParallelOldGC
- -XX:+UseConcMarkSweepGC
- -XX:+UseG1GC
运转情况
我们利用现成的JIRA义务来运转这个测试。选择它的缘故原由十分复杂——撤除Minecraft(一款出名网游),恼怒的小鸟,和Eclipse不说,JIRA应当是最出名的Java使用程序了。而且和其余候选者比拟,它更能代表我们一样平常的营业处置流程——究竟来讲Java用得最多的中央仍是在服务真个Java企业级使用。
影响我们决意的另有一个要素——Atlassian的工程师们公布了一个打包好的JIRA压测剧本。我们能够间接用它来举行我们的基准测试。
我们细心的将最新版的JIRA6.1解压,然后把它安装到MacOSXMavericks上。最初间接利用默许的内存参数设置来运转这个测试程序。Atlassian团队的家伙已帮我们把参数也设置好了:
- -Xms256m-Xmx768m-XX:MaxPermSize=256m
复制代码 这个程序利用了JIRA的罕见的几种分歧功效——创立义务,分派义务,剖析义务,查找及发明义务,等等。总的运转工夫是30分钟。
我们利用了三种分歧的GC算法来运转这个测试——Parallel,CMS,和G1。每次测试都从头启动一个新的JVM实例,并事前把存储恢复到一样的形态。统统筹办停当后我们才入手下手启动压测。
了局
每次测试我们都经由过程-XX:+PrintGCTimeStamps-Xloggc:/tmp/gc.log-XX:+PrintGCDetails来搜集GC日记,最初利用GCViewer来剖析内里的数据。
汇总后的了局以下。注重测试了局的单元是毫秒。
年ParallelCMSG1TotalGCpauses209301887062000MaxGCpause7216450申明
起首来看ParallelGC(-XX:+UseParallelOldGC)。在这30分钟的测试过程当中,并行搜集器的GC也许停息了有21秒。最长的一次花了721毫秒。我们来以这个做为基准:从总的运转工夫来看,GC周期削减了1.1%的吞吐量。最长的提早工夫也许是721毫秒。
下一个:CMS(-XX:+UseConcMarkSweepGC)。在30分钟的测试中,因为GC而丧失的工夫是19秒。吞吐量和上一次的并行形式下的差未几。不外时延方面有了分明的改良——最坏的情形下的时延削减了10倍!如今最年夜的GC停息工夫只要64毫秒。
最初一次测试用的是最新最潮的GC算法——GC(-XX:+UseG1GC)。运转的是一样的测试程序,不外了局的吞吐量则严峻下落了。此次测试使用在GC上消费的工夫凌驾了一分钟。和CMS只要1%的开支比拟,此次的吞吐量下落了有3.5%。不外假如你不在意吞吐量而更在意时延的话——这方面它和后面体现最好的CMS比拟另有20%的提拔——G1接纳器最长的停息工夫只要50ms。
结论
想经由过程这么一次实验来得出一个结论长短常伤害的。假如你的工夫充分又有响应的才能的话——你应当在本人的情况中详细情形详细剖析,而不是利用一刀切的办法。
不外假如说非要得出一个结论,我以为说CMS仍旧是最好的默许选择。G1的吞吐量其实是太差,和它所削减的那点时延比拟其实不划算。
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。 |
|