围城书评

重要要点

  • Java中的性能调优是一门实验科学。
  • JVM没有神奇的“更快”命令行开关。
  • 没有使Java运行更快的“技巧”。
  • Java代码的执行速度是高度动态的,并且从根本上取决于底层的JVM。
  • JIT编译的代码的行为比解释器本身重要得多。
  • 本书提供了有关如何在Java中进行性能调整的理论和实践。
  • 这是一本全面的书,代表了初学者的教程和经验丰富的Java性能调优从业人员的参考。

2018年5月发布的Optimizing Java是Java行业专家Ben Evans , James Gough和Chris Newland编写的Java编程语言中的性能调优的全面深入研究。

这本书开创了先河,作者在第一章中全面定义了Java优化和性能。 他们解释了为什么在大多数应用程序的整个生命周期中都可能错误地应用了Java性能调整。 重要的是要注意:

Java代码的执行速度是高度动态的,并且从根本上取决于底层的Java虚拟机。 即使不重新编译Java源代码,旧的Java代码也可以在较新的JVM上更快地执行。

本书定义和使用了许多性能指标:

  • 吞吐量-系统或子系统可以执行的工作速率。
  • 延迟-处理单个交易并观察结果所需的时间。
  • 容量-工作单位的数量,例如可以在系统中同时运行的事务。 这与吞吐量有关。
  • 利用率-CPU应该忙于工作而不是闲置。
  • 效率-计算为吞吐量除以利用率。
  • 可伸缩性-衡量添加资源后吞吐量变化的方法。
  • 降级-观察到的延迟和/或吞吐量的变化,它是系统负载增加的函数。

这些年来,许多性能调整反模式困扰着开发人员。 这些可能是由于无聊,重新开始填充,缺乏理解或试图为不存在的问题找到解决方案而引起的。 作者定义了其中一些反模式,并揭穿了与之相关的神话。

有很多实用的启发式方法和代码级技术,但是作者警告说,如果应用不当,可能弊大于利。 鼓励读者在尝试任何代码或应用调用垃圾回收器和JVM参数的高级命令行参数之前充分了解性能调整的概念。 也有很多代码示例演示了这些概念。

相关的性能调优主题包括如何在JVM上执行代码,垃圾回收,硬件和操作系统,基准测试和统计信息以及性能分析。 作者以关于Java 9及更高版本的章节作为本书的结尾。

埃文斯和纽兰(Newland)采访了InfoQ,以了解他们在撰写本书时的经验,学习和障碍。

InfoQ:是什么促使您共同撰写这本书的?

本·埃文斯(Ben Evans) :我有初衷,我知道我想和合著者一起写。 詹姆斯和我是老朋友,他曾经帮助过“坚果中的Java”,所以我知道我们可以一起写得很好,所以他是一个自然的选择。

当我们感到我们想更深入地研究JIT编译并涵盖该领域的一些工具时,这本书正在开发中。 我以前曾与Chris一起工作过,他的JITWatch工具给我留下了深刻的印象,因此我们请他在项目结束时加入我们。

克里斯·纽兰(Chris Newland) :在过去的五年中,我从事了一个名为JITWatch的开源项目,该项目可帮助Java开发人员了解JVM在运行时做出的编译决定。 我已经提供了一些有关JVM的JIT编译器的演示,但是认为如果有一本书可以解释Java技术的工作原理,这对Java开发人员将非常有用。

InfoQ:在撰写本书时,您是否有特定的目标读者?

Evans :中级到高级Java开发人员,他们希望使用合理的方法而不是凭空猜测来做好性能分析。 次要读者包括那些希望通过字节码,垃圾回收和JIT编译更深入地研究JVM并了解其真正工作原理的开发人员。

纽兰德 :我认为我们试图使所有层次的开发人员都可以阅读这本书,并且有很多示例来说明我们提出的观点。 本书的某些部分面向中级到高级开发人员,他们希望深入了解JVM性能。

InfoQ:尽管本书中Java性能的各个方面都很重要,但对于读者而言,是否有一个最重要的主题可以使它充分理解?

埃文斯(Evans) :没有魔法或“技巧”。 性能与软件开发不同-性能是它自己的一套技能,最好将其视为独立的学科。

该学科是数据驱动的-它涉及可观察数据的收集和解释。 收集,分析和理解数据存在困难,整个应用程序的行为与少量玩具代码或微小基准的行为完全不同。

或者,正如我们的朋友柯克·佩珀丁(Kirk Pepperdine)总是喜欢说:“量度,不要猜测。”

纽兰德 :我认为书中最重要的想法是程序要做的每件事都要付出代价,无论是分配新对象,调用方法还是执行算法。 为了提高程序性能,您必须首先了解如何可靠地对其进行度量,然后才能开始尝试使用不同的性能改进技术。

InfoQ:新的Java SE发布周期将对Java性能(如果有的话)产生任何影响,特别是在新功能(例如Java 10中引入的新的var保留类型)和垃圾收集方面的改进方面?

埃文斯(Evans) :这本书试图教的一件事是了解哪些功能可能会影响性能。 诸如Java的泛型或新的var保留类型名称之类的东西纯属编译时语言功能-它们仅在javac处理您的代码时才真正存在。 结果,它们根本没有运行时影响!

另一方面,垃圾回收会影响每个Java程序。 这是一个非常深入和复杂的主题,并且经常被程序员误解。 例如,我经常看到它(在某些在线论坛上)断言“与手动内存管理或引用计数相比,垃圾回收非常浪费”-通常没有任何证据,并且几乎总是没有任何琐碎的基准可以吸引特定的边缘情况。

实际上,现代GC算法是非常高效且非常出色的软件。 它们也非常通用-因为它们必须在整个Java工作负载范围内保持有效。 这种限制意味着GC算法要经过充分的战斗测试和真正的生产质量可能需要很长时间。

在Java世界中,非常重视向后兼容性和缺乏回归(包括性能回归)的问题。 例如,在Parallel收集器(这是Java 9之前的默认设置)中,JVM在分配新内存时几乎不做任何工作。 由于这项工作有助于观察到应用程序线程的运行时,因此可以使程序尽快执行。 权衡取舍(总会有权衡取舍)是收集器在世界停止(STW)暂停期间需要完成的更多工作。

现在,在Java 9中,默认收集器变为G1。 该收集器需要在分配时做更多的工作,因此仅由于收集算法的更改,观察到的应用程序代码的运行时间就会增加。

对于大多数应用程序而言,此分配所需的时间增加非常小,实际上足够小,以至于应用程序所有者不会注意到。 但是,某些应用程序由于其活动对象图的大小和拓扑而受到严重影响。

G1的最新版本无疑帮助减少了受到负面影响的应用程序数量,但是我仍然在从Parallel迁移到G1的过程中并不容易。 这样的事情意味着垃圾收集仍然是一个需要考虑性能的领域。

因此,GC的新进展-G1的不断成熟以及ZGC和Shenandoah等新收藏家已开始引起开发人员的注意-对于关心其性能的人们来说,这无疑再次成为一个活生生的话题。应用程序。

纽兰(Newland) :新的发行节奏允许使用更多增量方法来提高性能。 我们没有等待2年以上的时间来获取主要的新功能,而是看到了更多的实验性收集器(例如ZGC和Epsilon)以及对核心库(例如String和Collection性能)的不断改进。

InfoQ:如果有必要,是否有计划更新本书?

埃文斯(Evans) :我认为随着时间的推移,假设奥雷利(O'Reilly)的人们想出版第二版,肯定会有第二版的出版范围! 我认为将推动新版本发展的主要领域是:

首先,新的GC选择进入了主流-我们已经在上面讨论过了。

其次,关于新编译技术的全部故事-我认为Graal JIT编译器比许多开发人员现在意识到的要大得多。 将私有链接(即jlink自定义运行时图像)以及Java的提前(AOT)编译带来的工作量巨大,特别是对于那些希望通过架构更改来进行微服务和云计算的人(包括在应用启动时)。 Java编译技术的那些变化将不可避免地对性能产生重大影响。

第三,Java Java语言架构师Brian Goetz的目标是“使JVM内存布局行为与现代硬件的成本模型保持一致”。 这是Valhalla项目的所有工作(包括值类型),也是研究矢量化和基于GPU的计算的人们。 这个领域-不仅是值类型,还包括许多其他难题-将对我们构建Java / JVM应用程序的方式以及它们的性能产生重大影响。

Newland :我认为Graal是一种非常令人兴奋的新JVM技术,随着它的采用,它在本书中进行介绍会很有用。

InfoQ:您目前的职责是什么,即您日常工作是什么?

Evans :我是jClarity的董事,这是我几年前与Kirk Pepperdine和Martijn Verburg共同创立的Java性能公司。 当我不忙在那里时,我也有自己的私人咨询,研究和教学实践。 该业务的目的是帮助客户解决其性能和体系结构问题,并帮助发展其开发团队。 我总是很高兴听到我可能会帮助的人-ben@kathik.co.uk。

我花了一些时间来帮助一家名为“ 全球规范”的慈善机构,该机构为西非的年轻软件工程师和企业家开设暑期班,为这些学校编写代码 。 我还做一些临时/咨询CTO工作,以及大量的口语和写作,当然包括在InfoQ上运行Java / JVM内容跟踪。

Newland :我研究市场数据,使用Java和JVM实时处理股市信息。 我编写的程序往往只包含少数对性能至关重要的区域,因此对JVM的理解至关重要。

翻译自: https://www.infoq.com/articles/book-review-optimizing-java/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

围城书评

围城书评_书评:优化Java相关推荐

  1. 围城书评_书评:Java应用程序体系结构

    围城书评 Java应用程序体系结构:使用OSGi的带有示例的模块化模式是Kirk Knoerschild的开创性著作,内容涉及如何通过提供十八种模式的目录来设计应用程序设计中的模块化. 本书的第一部分 ...

  2. 围城书评_书评:实施模式

    围城书评 肯特·贝克(Kent Beck)的新书<实现模式>是一本有关用Java编写代码的书. 本书中的模式基于Kent对现有代码的阅读以及他自己的编程习惯. 这些模式与开发人员通过代码进 ...

  3. 围城书评_书评:移动Web开发

    围城书评 谁写的? (Who Wrote It?) Mobile Web Development is written by Nirav Mehta, the head of Magnet Techn ...

  4. 围城书评_书评:关于HTML5的真相

    围城书评 Summary: Luke Stevens has crafted an excellent history as to how HTML5 got to where it is, and ...

  5. 围城书评_书评:移动优先

    围城书评 According to a recent report, by 2015 more people in the US will be accessing the Internet usin ...

  6. 绿色数据中心空调设计 书评_书评:负责任的响应式设计

    绿色数据中心空调设计 书评 Yesterday Guy Podjarny published his analysis of the use of responsive design among th ...

  7. 绿色数据中心空调设计 书评_书评:响应式设计工作流程

    绿色数据中心空调设计 书评 Responsive design has many challenges. Performance. Tables. Images. Content. Testing. ...

  8. 绿色数据中心空调设计 书评_书评:PHP中的实用设计模式

    绿色数据中心空调设计 书评 This review of Brandon Savage's Practical Design Patterns in PHP will include my own o ...

  9. java运行效率优化_如何优化JAVA代码及提高执行效率

    展开全部 1)尽量指定类.方法的final修饰符.带有final修饰符的类是不可派生的,Java编译器会寻找机会内32313133353236313431303231363533e4b893e5b19 ...

最新文章

  1. 旋转矩阵、欧拉角、四元数、轴/角之间的转换
  2. MongoDB 主从集群配置
  3. LG将授权webOS给其他电视厂商使用
  4. 单片机与微型计算机在结构上的区别和联系,AT89S52单片机片内硬件组成结构,与一般单片机和微机组成结构比较,显著区别有?...
  5. Spring Boot + SpringSecurity + JWT 实现简单的 restful Api 权限控制
  6. rest framework 权限
  7. Fragstats 提示错误与警告
  8. php kingeditor 相对路径,kindeditor上传图片生成绝对地址
  9. 【指南 】北理珠第十届C语言程序设计挑战杯
  10. JS短文 | 3分钟了解下 JS Sets 集合
  11. 企业盈利能力五大指标之:毛利率
  12. 机器学习性能改善备忘单:32个帮你做出更好预测模型的技巧和窍门
  13. 笔记:centos7的目录挂载,重要目录,/etc目录下重要文件
  14. 【Linux】制作U-Boot烧写镜像到SD卡的过程(上篇)
  15. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控
  16. 摄影知识系列讲座 - 第一章《光圈、快门篇》
  17. python怎么读取石墨表格_用python和柳比歇夫工作法,自动做每周的周总结,导出周小节图表...
  18. facsum (线性筛 积性函数)
  19. homebrew Error: qt: unknown version :mountain_lion
  20. Android最好用的项目框架搭建

热门文章

  1. PowerShell脚本传参
  2. 抓取淘宝商品价格人气-http://hws.m.taobao.com/cache/wdetail/5.0
  3. 腾讯QQ实用技巧一箩筐 必有你所需
  4. word中怎么设置标题大纲级别
  5. 我遇到的Java面试题
  6. 立项报告和未来申报模板
  7. 中央空调远程监控运维系统成功应用案例
  8. win10屏幕亮度调节不起作用,移动中心,热键均不生效,调节不了,终极解决办法
  9. Linux中echo $命令的作用
  10. 我在安装Quartus 18中遇到的问题以及解决方法