利用specJVM98和Java Grande Forum Benchmark suite Benchmark集合對SJVM、IntelORP,Kaffe3種Java虛擬機進行系統(tǒng)測試。在對測試結(jié)果進行系統(tǒng)分析的基礎(chǔ)上,比較了不同JVM實現(xiàn)對性能的影響和JVM中關(guān)鍵模塊對JVM性能的影響,并提出了提高JVM性能的一些展望。
目錄
1? Java虛擬機的關(guān)鍵技術(shù)
1.1? 字節(jié)碼執(zhí)行方式
1.2? 自動內(nèi)存管理
2 JVM 性能的分析和比較
2.1 JVM 的選擇
2.2 JVM 性能測試
2.3 JVM 性能的分析和比較
3? 結(jié)語
Java語言的平臺無關(guān)性、安全性、自動內(nèi)存管理等特性,使Java語言得到廣泛的應(yīng)用。Java虛擬機JVM)是 Java平臺的核心,JVM讀入Java 類文件并執(zhí)行類文件中的字節(jié)碼。在一個平臺只要有1 個Java虛擬機就可執(zhí)行Java程序,實現(xiàn)Java語言的平臺無關(guān)性。Java的字節(jié)碼中無影響系統(tǒng)安全的指令,同時,JVM讀入類文件時,需要預(yù)驗證類文件,這兩點保證了Java語言的安全性。自動內(nèi)存管理減輕了Java程序員的負擔(dān),提高了應(yīng)用程序的可靠性。但這些特性,使Java的性能受到了一定的影響。字節(jié)碼執(zhí)行方式(Execute Engine)和自動內(nèi)存管理是影響 Java 虛擬機性能的關(guān)鍵模塊。本文通過比較幾種有代表性的 Java 虛擬機的實現(xiàn),分析了JVM 中的這2 個關(guān)鍵技術(shù)。
1? Java虛擬機的關(guān)鍵技術(shù)
1.1? 字節(jié)碼執(zhí)行方式
最早的Java虛擬機采用的是解釋(Interpreter)執(zhí)行的方式,這種方式效率極低,但JVM的可移植性較好。目前主流的 Java 虛擬機基本采用即時 JIT,Just—In-Time) 編譯的方法執(zhí)行字節(jié)碼,即將 Java的字節(jié)碼動態(tài)編譯為本地的機器碼,效率較高,好的JIT 編譯效果可以接近 C 語言靜態(tài)編譯的效果。但JIT在執(zhí)行任何一個方法時,都需要先將該方法編譯為本地代碼,需要額外的內(nèi)存存放編譯后的本地代碼。對于程序中執(zhí)行頻度較低的方法,由于增加了編譯的時間,其效率不如解釋執(zhí)行的情況。衡量一個JIT好壞的標(biāo)準(zhǔn)包括編譯的代碼質(zhì)量、編譯的代碼大小以及編譯的時間這3個方面。自適應(yīng)優(yōu)化(Adap-tive Optimization)是字節(jié)碼執(zhí)行的第3 種方式,其實質(zhì)是混合執(zhí)行(Mixed code execute)。自適應(yīng)優(yōu)化在第1次調(diào)用一個方法時,先采用解釋執(zhí)行的方式,當(dāng)這個方法的調(diào)用達到一定的頻度而成為“熱點”(Hot spot 的方法后,將該方法編譯為本地代碼,以后對該方法的調(diào)用,直接執(zhí)行編譯后的本地代碼。
1.2? 自動內(nèi)存管理
自動內(nèi)存管理也稱為垃圾收集(GC,Garbage Collection) ,其作用是自動回收無用單元的內(nèi)存空間,釋放內(nèi)存的工作由Java虛擬機自動管理,減輕了應(yīng)用程序員的負擔(dān),避免了Java應(yīng)用程序的內(nèi)存泄漏。垃圾收集算法的主要評價標(biāo)準(zhǔn)為吞吐量(Throughput)和停頓時間(Pause time) 2個方面。吞吐量指在程序運行中,非垃圾收集的時間與整個應(yīng)用程序運行時間的比值,比值越高,垃圾收集算法的整體效率越高。
2 JVM 性能的分析和比較
2.1 JVM 的選擇
在本測試中,選擇了3 個有代表性的虛擬機實現(xiàn)作為研究的對象。
1) Sun Hotspot Client VM 1.4.1 (SJVM) 【1.是Sun公司提供的針對J2SE平臺的虛擬機,采用了自適應(yīng)優(yōu)化的字節(jié)碼執(zhí)行方式、基于代(Generation)的垃圾收集機制、標(biāo)記-清除(Mark-Sweep)算法和拷貝算法結(jié)合的算法。
2) Intel Open Runtime Platform 1.0.10 (Intel ORP 2.是Intel公司提供的Java 虛擬機,提供了針對IA32架構(gòu)優(yōu)化的JIT編譯器,采用增量式的Train垃圾收集算法。
3)Kaffe 1.0.73.是開放源代碼的Java虛擬機實現(xiàn),它支持的平臺較多,垃圾收集機制采用了不分代的保守的標(biāo)記一清除算法,并提供了 JIT 的編譯器。
2.2 JVM 性能測試
通過Benchmark集合的測試,能夠有效的比較和分析不同JVM實現(xiàn)對性能的影響以及JVM中關(guān)鍵模塊對JVM性能的影響。在本測試中,測試用的Benchmark集合為specJVM98【4】和Java Grande Forum Benchmark suite5.specJVM98采用的是接近真實的應(yīng)用程序,主要包括Db、Compress、Jess、Javac、Mep-gaudio、Mtrt、Jack7個應(yīng)用程序。Java Grande Forum Benchmark (以下簡稱JGF)包括3個部分的測試,第1部分為基本的底層操作,包括算術(shù)、賦值、方法調(diào)用、異常處理等;第2部分為核心的操作,包括加密、堆排序、矩陣相乘等算法;第3部分為大規(guī)模的應(yīng)用程序,包括了Alpha-beta剪枝搜索、RayTracer等算法。本測試采用的操作系統(tǒng)為Red Hat Linux 7.3.硬件平臺為AMD Athlon 1700+,內(nèi)存256M。圖1為specJVM98的測試結(jié)果,圖2 至圖4為JGF3個部分的測試結(jié)果。
2.3 JVM 性能的分析和比較
在Java虛擬機中影響性能的模塊主要是即時編譯和垃圾收集這兩個模塊。即時編譯模塊的性能包括編譯時間和編譯后代碼質(zhì)量兩方面。垃圾收集模塊主要從吞吐量和停頓時間2 個方面來衡量。
從圖1可以看出,Kaffe虛擬機的性能較差,除了第一項測試compress接近SJVM和Intel ORP的性能外,其它測試中的性能表現(xiàn)低于另2個虛擬機的一半。Intel ORP在Compress, Mepgaudio2項測試中要略高于SJVM,而SJVM的性能在其他測試中表現(xiàn)最好。因此,從specJVM98的測試結(jié)果來看,SJVM的虛擬機表現(xiàn)最好,Intel ORP的性能較接近SJVM, Kaffe的性能與這兩者間有一定的差距。
從圖2、圖3、圖4可以看出:對于JGF基本底層和核心部分的測試,Intel ORP和SJVM的性能相差不大,Kaffe 的性能都低于前兩者;對于大規(guī)模應(yīng)用程序的測試,SJVM 的性能遠好于 Intel ORP 和Kaffe,而Intel ORP的性能好于Kaffe,這個程序的詳細運行結(jié)果見表1。
從表1可以看出:Kaffe 的 GC 時間為Intel ORP 的4.79 倍,非GC (大部分為JIT) 時間為Intel ORP的27.87%,非GC時間占整個運行時間的6.40%; Kaffe與Intel ORP相比,大部分的時間花費在JIT編譯上; Intel ORP的GC時間為SJVM的25.77倍,非GC時間為SJVM的1.26倍;GC時間占整個運行時間的45.95%。
從以上分析可以看出:
1) SJVM的整體性能是最好的,大部分的性能高于Kaffe和Intel ORP,尤其是在JGF大規(guī)模應(yīng)用程序的測試部分,它的性能遠遠高于Kaffe和Intel ORP。這是由于字節(jié)碼執(zhí)行方式采用了自適應(yīng)優(yōu)化的算法,只編譯最常用的“熱點”方法,同時編譯的代碼質(zhì)量較高。
2) SJVM垃圾收集機制較好,也是其性能高于其它兩個JVM的關(guān)鍵原因。Intel ORP的即時編譯較好,接近SJVM采用的自適應(yīng)優(yōu)化的算法,但垃圾收集表現(xiàn)較差,在測試中,一些Benchmark的程序未能正確運行,其語言支持不好。
3) Kaffe的性能表現(xiàn)比較差,主要原因是由于即時編譯較差,同時垃圾收集機制的算法也較粗糙。文章來源:http://www.zghlxwxcb.cn/news/detail-675495.html
3? 結(jié)語
JIT 編譯和垃圾收集模塊是 JVM 中影響性能的關(guān)鍵模塊。JIT 編譯的實現(xiàn)與體系結(jié)構(gòu)的關(guān)系密切,實現(xiàn)時應(yīng)充分考慮體系結(jié)構(gòu)的影響,針對目標(biāo)平臺優(yōu)化。垃圾收集機制的平臺相關(guān)性較小,實現(xiàn)垃圾收集時,考慮較多的是算法上的提高。當(dāng)然,不同平臺上的內(nèi)存管理機制還是有差別的,如不同平臺上實現(xiàn)虛擬內(nèi)存的方式、實現(xiàn)cache的方式都有可能不同,這也是提高一個特定平臺上垃圾收集機制時需要考慮的因素。文章來源地址http://www.zghlxwxcb.cn/news/detail-675495.html
到了這里,關(guān)于小研究 - Java虛擬機性能及關(guān)鍵技術(shù)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!