加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

不要被直觉误导 关于Java性能的9个谬论

发布时间:2017-02-21 17:54:29 所属栏目:教程 来源:臧秀涛编译
导读:副标题#e# 【技术】Java的性能有某种黑魔法之称。部分原因在于Java平台非常复杂,很多情况下问题难以定位。然而在历史上还有一种趋势,人们靠智慧和经验来研究Java性能,而不是靠应用统计和实证推理。在这篇文章中,我希望拆穿一些最荒谬的技术神话。 1.Jav

  当应用陷入困境,并且怀疑是GC的问题时,很多应用团队的反应就是增加堆的大小。在某些情况下,这样做可以快速见效,而且为我们留出了时间来考虑更周详的解决方案。然而,如果没有充分理解性能问题的原因,这种策略反而会让事情变得更糟糕。

  考虑一个编码非常糟糕的应用程序,它正在产生很多领域对象 (它们的生存时间很有代表性,比如说是2-3秒)。如果分配率高到一定程度,垃圾收集会频繁进行,这样领域对象会被提升到老年代。领域对象几乎是一进入年老代,生存时间就结束了,从而直接死亡,但它们直到下一次Full GC时才会被回收。

  如果增加了应用的堆大小,我们所做的不过是增加了相对短命的对象进入和死亡所用的空间。这会导致Stop-The-World停顿时间更长,对应用并无益处。

  在修改堆大小或者调校其他参数之前,理解对象的分配和生存时间的动态是很有必要的。没有测量性能数据就盲目行动,只会使情况更糟糕。在这里,垃圾收集器的老年代分布情况特别重要。

  结论

  当谈到Java的性能调校时,直觉常常起误导作用。我们需要实验数据和工具来帮助我们将平台的行为可视化并加强理解。

  垃圾收集就是最好的例子。对于调校或者生成指导调校的数据而言,GC子系统拥有无限的潜力;但是对于产品应用而言,不使用工具很难理解所产生数据的意义。

  默认情况下,运行任意Java进程(包括开发环境和产品环境),应该至少总是使用如下参数:

  • -verbose:gc(打印GC日志);

  • -Xloggc:(更全面的GC日志);

  • -XX:+PrintGCDetails(更详细的输出);

  • -XX:+PrintTenuringDistribution(显示JVM所使用的将对象提升进入老年代的年龄阈值)。

  然后使用工具来分析日志,这里可以利用手写的脚本,可以用图生成,还可以使用GCViewer(开源的)或jClarity Censum这样的可视化工具。

  作者:Ben Evans 译者:臧秀涛

  原文链接:http://www.infoq.com/articles/9_Fallacies_Java_Performance

  译文链接:http://www.infoq.com/cn/articles/9_Fallacies_Java_Performance

  关于作者

  Ben Evans是jClarity(这是一家创业公司,主要设计辅助开发和运维团队的性能工具)的CEO。他是LJC(伦敦Java用户组)的组织者之一,也是JCP执行委员会的成员之一,JCP执行委员会负责帮助定义Java生态系统中的相关标准。他还是Java Champion和JavaOne Rockstar。他与人合著了《The Well-Grounded Java Developer》一书。此外,他还经常进行公开演讲,探讨Java平台、性能、并发及相关话题。

  本文转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读