Java性能权威指南1.2  平台版本约定_Java性能权威指南1.2  平台版本约定试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Java性能权威指南 > 1.2  平台版本约定

Java性能权威指南——1.2  平台版本约定

本书基于Oracle HotSpot JVM 和Java Standard Edition(Java SE)7 和8。在发布版之间, Oracle 更新会定期发布更新版本。多数时候,更新版本只修订bug,不会加入语言新特性或者变更关键功能,但会更改调优标志的默认值。Oracle 很可能将在本书出版之后提供更新版本,当前版本为Java 7 update 40 和Java 8(迄今为止,还没有Java 8 的更新版本)1。如果更新版本对JVM 的行为做了重大修订,则会命名如下:7u6(Java 7 update 6)。 本书关于Java 企业版(Java EE)的内容是基于Java EE 7。 虽然当前版本的Java 构建于之前的发布版,但本书并不涉及老版本Java 的性能调优。对这本讲述性能调优的书而言,Java 7 是一个很好的起始点,因为Java 7 引入了大量的性能新特性和优化。其中最主要的是称为G1 的垃圾收集(GC)算法(老版本的Java 包含了G1 的试验版,但直至Java 7u4,G1 才真正可用于生产环境)。Java 7 也包括许多与性能相关的新特性和增强,可以让我们更清楚地了解Java 应用的运转。Java 8 再接再厉,平台得到了进一步增强(例如引入了lambda 表达式)。Java 8 自身的性能得到了巨大提升,在好几个关键性领域都大大超过了Java 7。 JVM 还有其他实现。Oracle 自己的JRockit JVM(支持Java SE 6)。IBM 提供了自己的Java 兼容实现(包括Java 7 版本)。还有许多其他公司得到许可从而可以改进Oracle 的Java 技术。 注1:现在为Java 7 update 55,Java 8 update 5。——译者注 Oracle 的商业版JVM Java 和JVM 都是开源的,任何想参与Java 开发的人都可以加入项目:http://openjdk. java.net。即便你不打算参与开发,也可以从上述网站免费下载源代码。本书讨论的所有内容基本上都是基于开源版的Java。 Oracle 也有商业版的Java,可以通过支持合同获得。它基于标准开源版本的Java 平台,但包括了一些开源版中所没有的特性。商业版JVM 中和性能密切相关的一个特性就是Java 飞行记录器(Java Flight Recorder,JFR,参见3.4.1 节)。 除非特别说明,本书所有的内容都适用于开源版的Java。 虽然只有通过兼容性测试的平台才能使用Java 的名称,但本书不会总是围绕兼容性展开讨论。那些调优标志尤其如此。所有的JVM 实现都有一个或多个垃圾收集器,但每个供应商所提供的GC 实现,其调优标志都是产品特定的。所以本书所讲的概念可适用于所有Java 实现,但具体的调优标志和建议仅适用于Oracle 的标准(基于HotSpot 的)JVM。 用较早版本的HotSpot JVM 时要注意,标志及其默认值在发布版之间可能会发生变化。本书只涵盖Java 7(直到7u40)和Java 8(仅首个版本),而不是试图穷尽迄今为止的各个版本。以后的版本(例如,假定是7u60)可能会对这些信息做少许改动。重要的变更请查阅发布说明。 从API 层面来看,不同JVM 实现之间的兼容性很高,即便特定类在Oracle HotSpot Java SE(或EE)和其他平台上的实现方式也有细微的不同。类的功能必须等价,但具体实现可以变更。所幸这些并不多见,不会对性能产生重大影响。 对于本书的剩余部分,术语Java 和JVM 应理解为特指Oracle HotSpot 的实现。严格来说, “JVM 首次执行时不会进行代码编译”的说法并不正确,因为有些Java 的实现在首次执行时会编译代码。但这种略写比到处写(和读)“Oracle HotSpot JVM……”要简便得多。 JVM调优标志 除了少数例外,JVM 主要接受两类标志:布尔标志和附带参数的标志。 布尔标志采用以下语法:-XX:+FlagName 表示开启,-XX:-FlagName 表示关闭。 附带参数的标志采用以下语法:-XX:FlagName=something,表示将标志flagName 的值设置为something。其中something 通常可以为任意值。例如-XX:NewRatio=N,表示NewRatio 可以设置为任意值N(N 是我们讨论所关注的重点)。 介绍每个标志时,我们会讨论它的默认值。默认值的选取通常综合考虑了不同因素:运行JVM 的物理平台,以及其他传给JVM 的命令行参数。如有疑问,可以参考3.2.1 节所介绍的方法,在给定的命令行上,添加-XX:+Printflagsfinal(默认为false,即“关闭”)就能获得具体运行环境中特定标志的默认值。基于环境对标志进行自动调优的过程称为自动优化(Ergonomics)。 Client 和Server 类虚拟机 Java 的自动优化前提是机器被分为“Client”和“Server”。这两个术语直接与特定平台(参见第4 章)上的默认JVM 编译器相关,它们也设定了默认的调优标志。例如, 机器类别决定了平台默认的垃圾收集器(参见第5 章)。 Microsoft Windows 上运行的任何32 位JVM(无论机器上CPU 的个数是多少),以及单CPU 机器(不论是什么操作系统)上运行的任何32 位JVM,都是Client 类机器。所有其他机器(包括所有64 位JVM)都被认为是Server 类。 从Oracle 和OpenJDK 站点下载的JVM,被称为“产品”JVM。需要生成不同版本的JVM 时,可以从源代码构建:调试版、开发版等。这些版本通常有更多的特性。特别是开发版,包含了大量的调优标志,开发人员可以尝试与JVM 各种算法的细节打交道。不过本书基本上不会考虑这些标志。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Java性能权威指南》其他试读目录

• 1.1  概述
• 1.2  平台版本约定 [当前]
• 1.3  全面的性能调优
• 1.4  小结