官术网_书友最值得收藏!

1.2 平臺版本約定

本書基于Oracle HotSpot JVM和Java Standard Edition(Java SE)7和8。在發布版之間,Oracle更新會定期發布更新版本。多數時候,更新版本只修訂bug,不會加入語言新特性或者變更關鍵功能,但會更改調優標志的默認值。Oracle很可能將在本書出版之后提供更新版本,當前版本為Java 7 update 40和Java 8(迄今為止,還沒有Java 8的更新版本)現在為Java 7 update 55, Java 8 update 5。——譯者注。如果更新版本對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技術。

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各種算法的細節打交道。不過本書基本上不會考慮這些標志。

主站蜘蛛池模板: 桦甸市| 泽库县| 永靖县| 衡水市| 沙雅县| 惠州市| 彩票| 吉安县| 翁牛特旗| 大化| 黑山县| 原阳县| 江西省| 顺义区| 忻州市| 洛浦县| 宝鸡市| 辽阳市| 海安县| 三原县| 滁州市| 呼和浩特市| 五台县| 大邑县| 布尔津县| 保定市| 徐闻县| 邢台市| 安义县| 宝山区| 柘城县| 临夏县| 高淳县| 太和县| 鄯善县| 长治县| 元氏县| 辉南县| 巧家县| 建始县| 蕉岭县|