2013-10-31 46 views
9

使薩姆測試這個星期,我發現這樣的情況:性差異

當我使用JDK/JRE /斌/ Java的Java可執行文件運行Tomcat中性能比我用jdk/bin/java運行時要好很多。 問題是:有人知道爲什麼jdk包提供了2個java可執行文件,它們之間的區別是什麼,證明了性能差異?

+3

你可以分享基準測試嗎?他們之間沒有區別。 JRE是運行時環境,它只需要運行程序並且不包含額外的實用程序(jstack,jconsole,javah)。 JDK bin中的java.exe到JRE bin –

+0

之間的性能不應該變化。另外,請分享每個版本的Java版本(java -version)。我假設你正在運行OpenJDK。文件大小有差異嗎?你可能有衝突的JVM –

+0

對不起,但我沒有基準測試...我的問題是基於tomcat啓動時間,與jdk可執行文件需要600.000毫秒開始和jre需要160.000毫秒。差別很大。該版本是OpenJDK 64位服務器虛擬機(構建24.45-b08,混合模式) –

回答

3

java.exe文件實際上是相同的。 JDK是Java開發工具包,它包含開發應用程序所需的所有Java可執行文件。

的JRE是Java運行時環境,其中包括你所需要的運行Java應用程序

所以對於運行在部署模式的應用程序,你只需要JRE,最終用戶可能只會有一個JRE而不是JDK。

+0

這並沒有解決爲什麼JDK版本可能比JRE慢...這個問題(真正的)部分的任何想法? – rolfl

10

我遲到了,但是......我來到這裏尋找OpenJDK中幾個java變體之間的區別。我最後只是對問題的「它們之間的區別」作了一些澄清和附加問題;希望它有幫助。

在OpenJDK裏面找(我使用OpenJDK的1.7.0)基本目錄我看到 java S,都具有不同的哈希和:

  • bin/java,二進制
  • jre-abrt/bin/java,二進制;假設ABRT是Automatic Bug Reporting Tool
  • jre/bin/java,這是一個外殼腳本,其格式爲jre-abrt/bin/java變體,採用兩種不同方式之一(詳見下文)。

上面的二進制變體具有相同的文件大小和創建時間(在我的版本和系統中,無論如何),但兩個文件之間有4個字節不同(我沒有看得更遠 - 這是其他你的問題的一部分 - 但他們不同,它看起來不像一個ASCII字符串,例如)。

腳本變體是你說的更快,這似乎違反直覺,因爲它似乎在做更多。 (或者也許你只看到執行腳本的時間,而不是命令?)。該腳本檢查ABRT共享對象文件是否存在,如果存在,它將通過(如-agentpath....soabrt=on。再次,這似乎應該只是更多工作...假設使用ABRT。

如果你這個主題仍然有興趣,或許會看到以下有趣:

  • 什麼路徑,你正在做的是腳本(檢查的/usr/lib64/libabrt-java-connector.so存在或無論是在你的jre/bin/java腳本)
  • 如果直接執行第三個變種(jre-abrt/bin/java)更快
  • 其他被觸摸什麼在這兩種情況下 - 就像inotifystrace什麼的,但是這可能是巨大的像這樣的服務。