前言
你如何定义性能?
当被问及应用程序的性能时,大部分开发人员会假定他们需要测量某些速度值,比如每秒交易数,或者处理了多少吉字节(GB)数据……,要在尽可能短的时间里完成大量工作。
如果你是应用程序架构师,那你可能会测量更广泛的指标。与按直线逻辑执行的程序相比,你或许更关注资源利用率。你可能更重视服务间连接的性能,而不是服务本身的性能。如果你要为公司做出业务决策,应用程序的性能很多时候不是用时间而是用美元来计算的。你可能会与开发人员和架构师争论资源分配,权衡 DevOps 的成本和完成公司工作所需要的时间。
有些时候,甚至是大部分时候,“好的”编码模式盛行:小方法会恰当内联,接口和类型检查成本变低,JIT 编译器生成的原生代码紧凑又高效。但是其他时候,考虑到编译器和 CPU 的限制,我们需要手动调整代码,改变抽象和架构。有些时候,对象几乎是没什么成本的,都不用考虑我们会消耗内存带宽和垃圾收集周期。其他时候,我们要处理 TB甚至更大规模的数据集,这时候即使是最好的垃圾收集器和内存子系统,也要承受很大压力。
而现在,性能问题的答案是了解你的工具。通常这意味着你不但要了解Java 语言是如何工作的,还要知道 JVM 类库、内存、编译器、垃圾收集器和应用程序运行所在的硬件是如何交互的。在我从事 JRuby 项目的工作中,我学到一个有关 JVM 的不变的真理:所有的性能问题都没有单一的解决方案,而是有很多解决方案。技巧就是找到那些方案,并把最能满足要求的拼凑起来。
学习如何平衡应用程序的设计和可用的资源,如何监控和调优JVM,如何利用比老旧的类库和模式更高效的最新 Java 技术,如何让Java 运行如飞!
对Java开发人员而言,这是一个激动人心的时刻,从来没有这么多机会在 Java 平台上构建高效、响应式的应用程序。让我们开始吧。
本篇文章将给大家分享Java性能优化实践:JVM调优策略、工具与技巧,因为篇幅过多只能给大家展现出来部分的内容,希望大家能够理解与喜欢!!
首先看目录
其次,看主要内容
第1章明确优化与性能;优化 Java 或其他语言代码的性能经常被视作一种暗黑艺术。性能分析有种神秘感,人们常常将其看作孤独的黑客在绞尽脑汁、深思熟虑之后练就的手艺。(孤独的黑客也是好莱坞最喜欢的关于计算机和操作人员的电影桥段之一。)画面是这样的:一个人能够深入了解某个系统,提出神奇的解决方案,使计算机运行得更快。
影像中经常夹杂这种不幸但常见的情况:软件团队没那么重视性能。进而出现的场景是,只有当系统已经陷入麻烦时,团队才会加以分析。所以也就需要性能“英雄”来救场了。不过现实情况有点不同。
事实是,性能分析是坚实的经验主义和软性的人类心理学的奇异组合。重点在于,一方面是可观测指标的绝对数字,另一方面是最终用户和干系人如何看待这些数字。本文其余部分的主题就是如何解决这一明显的悖论。
本章首先讨论了 Java 的性能是什么,不是什么;然后介绍了经验科学和测量的基本主题,以及一个好的性能实践将用到的基本词汇和观测量;最后介绍了性能测试结果中一些常见的案例。接下来我们将开始讨论 JVM 的一些主要内容,并为理解到底是什么导致基于 JVM 的性能优化如此复杂做好准备。
第2章JVM概览;Java 无疑是地球上最大的技术平台之一,根据 Oracle 的数据,该平台拥有大约 900 万到 1000 万的开发人员。按照设计,很多开发人员不需要了解平台底层的复