熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

64位計算中的Java虛擬機(JVM)性能測試

2013-11-23 19:17:20  來源: Java核心技術 

  隨著DEC(Digital Equipment Corp)公司Alpha處理器在年末的發布就意味著這個世界開始進入位計算的時代緊接著全球幾大主要計算機公司如IBMHewlettPackard(惠普)Fujitsu(富士通)Sun Microsystems也發布了各自相應的產品進入到 這個市場Fujitsu旗下的HAL Computer發布了業界第一台基於位SPARC CPU的工作站SPARC此後不久Sun發布了大眾期盼已久的Ultra Ultra 工作站其內置了Sun的位UltraSPARC處理器時間轉換到IBM發布了其第一個位PowerPC RISC芯片RSIBM對RS進行改良使其支持SMP這就是Power 如今看起來位計算來說其整整花了五年的時間才在年開始大量進入市場

  在本文中將主要涉及兩個現在廣泛應用的位平台AMD與PowerPC並分別使用IBM與Sun Microsystems這兩個Java語言巨頭提供的Java虛擬機(JVM)通過SPECjvm與SPECjbb的測試來評價位與位中JVM的性能(注SPECjvm與SPECjbb來自Standard Performance Evaluation Corp )

  AMD是Advanced Micro Devices(AMD)公司的位平台其擴展了工業標准的x指令集架構並設計在不降低任何性能的前提下位模式中完全兼容現有的x應用程序與操作系統AMD發布了Opteron遵循AMD架構的第一款處理器

  與其同時IBM發布了PowerPC 其是源自IBM Power 雙核CPU的單核處理器從此IBM把位PowerPC架構帶到了桌面系統與低端服務器領域另外要說明一點PowerPC 也像Power 一樣可在不降低性能的前提下本地執行位指令不久之後由Apple Computer公司設計基於PowerPC CPU的Power Mac G電腦上市

  Java背景介紹

  在第一款位處理器誕生不久Java技術也出世了並由此改寫歷史Java是一種健壯的通用的面向對象的構架中立的可移植的安全的多線程的編程語言並帶有隱式內存管理功能Java面向對象的特性在很大程度上與C++相似但加入了更多的接口與擴展以創建更具靈活性的解決方案與C++不同的是Java不支持操作符重載多重繼承和自動類型強制Java通過廣泛的運行時檢查和內置的例外處理機制達到健壯性的目的編譯器所生成的只是字節碼指令其是獨立於任何特定平台的這樣就保證了架構中立性可移植性是通過指定基本數據類型大小和其算術操作符的行為來達到的例如int總表示一個有符號的位整數而float總表示一個位的IEEE 浮點數Java同時也有一系列的同步原語其基於廣泛使用的條件變量范式自動內存垃圾回收(GC)簡化了Java編程的難度並極大地降低了bug的數目但也使運行機制稍微復雜了點

  在也就是DEC公司發布第一款位處理器的前一年Sun Microsystems開始了一個名為the Green Project的計劃目的是要搶占下一波計算的先機並為此提前做好准備計劃得出的最初結論是移動數字設備與計算機的融合將會很快出現年的夏天計劃小組演示了*(星一個通過動畫式觸摸屏控制的交互性手持娛樂設備通過使用Oak一種全新的編程語言這個設備可控制很多不同的平台而由James Gosling開發的Oak其最主要的特點在於它是一個徹底獨立於處理器的語言在往後的幾年中這種語言被用於Internet之後成為大眾所知的JavaOak這個名字則因為版權問題從此消失了

  在Sun正式宣布Java的誕生這是一種程序員只需編寫一次但卻可在多種操作系統及多種硬件平台上運行的語言編寫一次隨處運行Sun發布了Java開發工具包(JDK 其後不久個主要的操作系統開發商宣布支持Java技術當中也包括Microsoft其以每年大約萬美元取得五年時間的Java許可協議Sun發布了Java平台的第一個即時(JIT)編譯器JDK 面世在隨後的三周時間裡達到了萬次的下載量到了年初這個數字達到兩百萬

  在年末Java 平台發布了大概半年後也就是年年中Sun發布了三個版本的Java平台JME(Java Micro Edition)應用於移動無線及有限資源的環境JSE(Java Standard Edition)應用於桌面環境JEE(Java Enterprise Edition)應用於基於Java的應用服務器此後廣泛應用的Java技術出現了一些framework如Enterprise JavaBeans (EJB)和JavaServer Pages (JSP)Java技術的隨後一次升級是出現在月的JSE 幾周後其獲得了Apple公司Mac OS X的工業標准的支持

  JSE 發布於月份對Java平台來說這是一個幾乎全新的產品與JSE 相比其多了近%的類和接口在這些新特性當中還提供了廣泛的XML支持安全套接字支持(通過SSL與TLS協議)全新的I/O API正則表達式日志與斷言

  在是Java最近的一次發布JSE (內部版本號代號Tiger現已提供公開下載Tiger包含了從年發布版本以來的最重大的更新其中包括泛型支持基本類型的自動裝箱改進的循環枚舉類型格式化I/O及可變參數

  Java虛擬機(JVM)是一個軟件規范相關軟件有責任遵守它以運行編譯為Java字節碼的程序JVM是一個抽象的計算機制並獨立於操作系統具有編譯後的程序體積小可防止執行惡意代碼等特點其沒有預先假設基於任何特定的實現技術不管是硬件還是操作系統通常我們有幾個常用的JVM軟件位與位版本性能有所不同但它們都包括JIT編譯器和垃圾回收功能(GC)

  JIT編譯器從JDK 開始就是JVM的一部分了當時Java只是用於浏覽器客戶端動態效果顯示的一種技術JIT編譯器實現了程序執行之前Java字節碼到硬件機器碼的動態翻譯其背後的思想在於相比Java源代碼字節碼更小也更容易編譯但付出的代價是需要在Java字節碼編譯為機器碼時花上一點時間但與直接把Java源代碼編譯為機器碼相比時間還是少得多的位與位的JVM中相應的JIT在把Java字節碼編譯為最終的機器碼時所花的時間稍微有所不同但還能進行一些優化另外在IBM與Sun這兩個版本的客戶端與服務端程序上總體性能也會有所不同

  垃圾回收是一種自動內存管理系統它會收回對象不再需要使用的內存從軟件工程的角度來看垃圾回收最大的一個好處就是程序員不用再操心那些低級的內存管理細節了同時垃圾回收也去除了源代碼中兩個最大的bug內存未釋放(內存洩漏)與過早釋放(指針崩潰)內存回收在Java程序運行期間占了一個很重要的部分因為它必須被經常執行以釋放對象不再訪問的Java堆由於在位與位平台上Java堆中的數據大小會有所變化所以會因為位與位JVM的性能差異導致相應垃圾回收的性能也會有所不同

  位背景介紹

  位計算有幾個重要組成部分第一就是位尋址實際上位尋址是通過位整數寄存器達到的(或RISC中所指的通用寄存器)位寄存器允許位的指針裝入到單個的寄存器中位的指針才是可以尋址訪問更大內存的實質所在位處理器只能訪問到字節或GB內存時位處理器理論上卻可尋址訪問字節或×GB內存在現代的位系統中可尋址的內存的實際限制通常比理論值低一點具體依賴於特定的硬件架構和操作系統舉例來說在基於Linux的操作系統中受限於當前Linux內核數據結構的設計可尋址的內存最多為字節或GB

  位計算的第二個重要方面就是位整數運算要提醒的是這可不是簡單地因為有了可存儲更多更大整數量更寬的位整數寄存器而帶來的必然結果其最直接的影響就是對那些需要處理密集大數值整數運算的程序而言可帶來性能上的飛躍

  第三個方面位計算的特性位操作系統與程序的應用相關的軟件必須全面支持硬件的位特性包括位尋址和運算通常還有一些附帶的好處可操作更多更大的文件管理更大的磁盤等等

  位計算所帶來的影響目前已在許多程序中得到了體現數據庫服務器現在可尋址更大的內存以維持更大的緩沖池數據緩存或在內存中進行排序以減少相關的I/O操作也能給每個用戶分配更多的內存支持更多的用戶或對更大的數據文件進行操作仿真或其他計算密集的程序也將從中受益現在可以在內存中分配更大的數組了最後別忘了還有大量的Java程序JEE應用服務器現在也能充分享受到位計算所帶來的好處了

  位計算的主要缺點是與它們位的兄弟相比位二進制文件一般都更大因此最終生成的機器碼體積也更大在系統緩存與旁路轉換緩存(TLB)大小不變的情況下可能會同時降低兩者的命中率這就是說在一定程度上性能會有所損失

  性能評測

  此處用於測試位與位JVM性能的系統是兩台位雙CPU工作站一台是基於AMD技術的Opteron系統而另一台是基於PowerPC的Apple Power Mac G兩台工作站都分別運行基於Linux的位操作系統受測試的JVM分別來自於IBM和Sun將使用SPEC的SPECjvm和SPECjbb來測試相應JVM的性能其中SPECjvm使用了以下項目測試客戶端性能

  ·__compress一個流行的壓縮程序

  ·__jess一個Java版的NASA CLIPS基於規則的專家系統

  ·__db數據管理基准測試軟件

  ·__javacJDK Java編譯器

  ·__mpegaudio一個MPEG音頻解碼器

  ·__mtrt一個對圖像文件進行處理的雙線程程序

  ·__jack一個分析程序生成器

  SPECjbb(Java商業基准程序)是一個用於服務端的基准測試程序其模仿了三層體系結構是一個通用類型的Java服務端應用程序

  通過運行SPECjvm以秒為單位記錄了每個基准測試的運行時長時間越短越好所有SPECjvm測試的堆大小因JVM而有所變化從最小值MB至最大值MB在SPECjbb測試中記錄了在三種不同堆大小時的每秒執行操作數更高的值代表更高的性能每一個測試程序都運行三次取成績最好的一次作為最後的結果

  圖與圖顯示了在AMD平台上Linux版本的Sun Java Standard Edition Development Kit (JSE )在SPECjvm和SPECjbb位與位的性能測試結果在SPECjvm測試中只有三項__compress__mpegaudio __jack位版本的JVM上比位表現出更佳的性能在SPECjbb位版本的性能只在有足夠堆大小的情況下才表現出更高的性能其中在堆大小為MB時因為某些活動數據在位JVM版本中體積更大導致垃圾回收動作更頻繁從而降低了程序性能

  







  圖與圖顯示了在AMD平台上Linux版本的IBM Developer Kit for LinuxJava Technology Edition Version GA在SPECjvm和SPECjbb位與位的性能測試結果其中基准測試程序中有三項__db__javac__jack位環境下表現出了更佳的性能另外在SPECjbb測試中當面對三個不同大小的測試堆時位IBM版本的JVM都沒有表現出比位版本更好的性能







  圖與圖顯示了在PowerPC平台上IBM Developer Kit for LinuxJava Technology Edition Version GA在SPECjvm和SPECjbb位與位的性能測試結果此處在所有SPECjvm和SPECjbb的測試中位JVM的性能都不及位平台







  結論

  基於運行Linux操作系統的PowerPC平台的測試結果表明如果在此平台上使用IBM的JVM那麼那些不需要位特性的程序還是讓它們運行在位JVM中吧因為在此平台的所有測試結果中位JVM的性能都比位平台低

  而基於運行Linux操作系統的AMD平台的測試結果表明不管是Sun還是IBM的JVM位與位的性能都在伯仲之間要注意的是性能的差異是依賴於具體的應用程序與JVM的如果需要最佳性能就必須在某個特定的執行環境中測試某個特定的程序以評價轉換到位所帶來的潛在性能提升

  有幾件事情需重點注意第一盡管SPECjvm與SPECjbb都是工業標准的基准測試程序但它們的測試范圍有限因此就測試結果而言只對一部分的Java程序正確而不是所有第二隨著位計算越來越被人們接受我們期待位程序會有所改進包括位JVM也許其在將來會大幅提高性能第三此處只組合測試了幾種特定的硬件平台操作系統與JVM因此如果要進一步地說明問題恐怕只有在位Windows XP/位Mac OS X上的進行JVM基准測試了


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26587.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.