
第1章 导论
这是一本关于Java性能调优科学和艺术的书。
说性能调优是门科学,这并不令人意外;性能调优涉及大量数字、检测和分析工作。性能调优工程师大多具有科学背景,只有基于严谨的科学理论才能将性能发挥到极致。
那它的艺术性呢?其实性能调优是科学与艺术的结合体这一说法并不新鲜,但我们探讨性能时却很少能清楚地意识到这一点。从某种程度上说,这可能是因为我们所受的教育训练并不容易产生“艺术”的思想火花。
说它是艺术的部分原因是,对一些人来说,艺术从根本上就是建立在知识和经验的基础上的。据说,足够先进的技术与魔术无异,例如对于圆桌骑士而言,使用手机毫无疑问就是一种魔法。与此类似,优秀性能调优工程师的工作就像是艺术,而这艺术正是源于深厚的知识、丰富的经验和敏锐的直觉。
本书的侧重点不在于三者中的经验和直觉,而是在拓展知识的深度。日积月累,这些知识将有助于提升你的技能,有助于你成为一名优秀的Java性能调优工程师。本书还有助于你深入理解Java平台性能的各个方面。
本书涉及的知识主要分两大类。首先是如何对Java虚拟机(Java Virtual Machine, JVM)自身的性能进行调优,即如何通过JVM的配置来影响程序的各种性能指标。JVM性能调优的过程实际上与C++程序员在编译时通过测试选择编译参数,以及PHP码农在php.ini文件中选择适当变量等过程非常类似,但对于那些即便有其他语言经验的Java开发者来说,调优过程仍然不那么令人愉快。
其次是理解Java平台的特性对性能的影响。注意,此处的平台既指Java语言(例如线程和同步),也指Java标准API(例如XML解析性能)。虽然Java语言和Java API完全不是一回事,但本书并不作严格区分,这两方面的内容都会涵盖。
JVM自身的性能很大程度上取决于调优标志,而Java平台的性能则更多由在应用代码中采用最佳实践决定。在一个开发团队中,开发人员编写代码,性能组负责性能测试。编码和调优常常被认为是两个不同的专业领域:性能调优工程师只是竭力将JVM的性能发挥到极致,而开发人员只关心他们的代码逻辑是否正确。这种区分没有什么意义。任何从事Java相关工作的人都应该熟谙代码在JVM中的行为,以及如何调优才能提升性能。对专业知识的全面掌握能让你的工作更具艺术气息。