第1章 导论

本书讨论Java性能优化的艺术与科学。

Java性能优化是一门科学,这样说并不令人惊讶:关于性能的讨论包含大量数字、评测和分析。大部分性能优化工程师拥有科学类的学科背景,而且实现最佳性能的关键就是严谨地运用科学方法。

那么Java性能优化是艺术吗?性能优化既是一门科学,又是一门艺术,这种说法并不新鲜,但是我们在讨论性能时很少明确地承认这一点。部分原因是“艺术”的概念与我们的调试过程相悖。对于一些人来说,看起来是艺术的东西,基本上都基于丰富的知识和经验。而足够先进的技术和魔法无异,就像对于圆桌骑士来说,手机真的拥有魔法。同理,优秀的性能优化工程师的工作成果犹如艺术作品,只不过这些艺术作品源于渊博的知识、丰富的经验和敏锐的直觉。

本书不能在经验和直觉方面提供帮助,但是可以帮助你积累丰富的知识。积年累月地使用这些知识,能帮助你获得优秀Java性能优化工程师的必备技能。本书的目标是让你深入理解Java平台的性能。

这些知识分为两大部分。第一部分关于Java虚拟机(Java Virtual Machine,JVM)的性能优化,即如何通过JVM的配置方式影响程序的性能。使用其他语言的资深开发人员可能认为JVM优化有点令人厌烦,但实际上,JVM优化类似于C++程序员在编译阶段测试和挑选编译器参数,或者PHP程序员在php.ini文件中设置合适的变量。

第二部分关于理解Java平台的特性如何影响性能。注意,这里使用了平台这个词:有些平台特性(比如线程和同步)是Java语言的一部分,而有些平台特性(比如字符串处理)是Java标准API的一部分。尽管Java语言和Java API有着显著的区别,但在本书中,两者会被同等对待。这两方面在本书中都会讲到。

JVM的性能主要取决于标志优化,而平台的性能更多地取决于是否在代码中应用了最佳实践。一直以来,开发人员只负责编写代码,性能优化组只负责测试并提出性能优化建议,这两方面被认为是独立的专业领域。这种区分从来就不太有用,因为任何使用Java工作的人都应该理解代码在JVM中的行为,也应该知道什么样的优化有助于提升性能。当项目转向DevOps模式后,这种区分开始变得模糊。只有全面掌握领域内的知识,才能让你的作品更具艺术气息。