10

今週いくつかのテストを行うと、この状況が見つかりました:

jdk/jre/bin/java で Java 実行可能ファイルを使用して tomcat を実行すると、jdk/bin/java で実行した場合よりもパフォーマンスが大幅に向上します。問題は、jdk パッケージが 2 つの Java 実行可能ファイルを提供する理由と、パフォーマンスの違いを正当化するそれらの違いを知っている人がいるということです。

4

2 に答える 2

10

java私はパーティーに遅れましたが... OpenJDK 内のいくつかのバリアントの違いを探してここに来ました。質問の「それらの違いは何ですか」の部分に対するいくつかの説明と追加の質問だけで終わりました。お役に立てば幸いです。

OpenJDK (私は OpenJDK 1.7.0 を使用しています) ベース ディレクトリの中を見ると、 3 つ javaの s があり、すべて異なるハッシュサムがあります。

  • bin/java、バイナリ
  • jre-abrt/bin/java、バイナリ; ABRT が自動バグ報告ツールであると仮定
  • jre/bin/java、 2 つの異なる方法のいずれかでexec、バリアントであるシェル スクリプト(詳細は以下)。jre-abrt/bin/java

上記のバイナリ バリアントのファイル サイズと作成時間は同じですが (とにかく、私のバージョンとシステムでは)、2 つのファイル間で 4 バイトが異なります (詳しくは調べていません。これは質問の他の部分です。 - しかし、それら異なっており、たとえば、ASCII 文字列のようには見えません)。

スクリプトバリアントは、あなたが言っているより高速なものです。これは、より多くのことをしているように見えるため、直感に反するようですexec(または、 'dコマンドではなく、スクリプトを実行する時間だけが表示されているのjavaでしょうか?) スクリプトは、ABRT 共有オブジェクト ファイルが存在するかどうかを確認し、存在する場合は (として-agentpath...).soおよびを渡しabrt=onます。繰り返しますが、これは、ABRT の使用を想定すると、より多くの作業が必要なように思えます。

このトピックにまだ興味がある場合は、次の内容を参照してください。

  • そのスクリプトのどのパスを使用しているか(スクリプトの存在/usr/lib64/libabrt-java-connector.soまたはその内容を確認してくださいjre/bin/java
  • 3 番目のバリアント ( ) を直接実行するjre-abrt/bin/java方が速い場合
  • これらの両方のケースで他に何が触れられていますか-inotifyまたはstrace何かのようですが、これはおそらくこのようなサービスにとって非常に大きなものです.
于 2014-04-23T18:38:18.977 に答える
4

java.exe ファイルは実際には同じです。JDK は Java 開発キットであり、アプリケーションの開発に必要なすべての Java 実行可能ファイルが含まれています。

JRE は Java ランタイム環境であり、Java アプリケーションを実行するために必要なものが含まれています。

アプリケーションをデプロイ モードで実行する場合、エンド ユーザーは JDK ではなく JRE しか持っていない可能性が高いため、必要なのは JRE だけです。

于 2013-10-31T15:11:41.307 に答える