今週いくつかのテストを行うと、この状況が見つかりました:
jdk/jre/bin/java で Java 実行可能ファイルを使用して tomcat を実行すると、jdk/bin/java で実行した場合よりもパフォーマンスが大幅に向上します。問題は、jdk パッケージが 2 つの Java 実行可能ファイルを提供する理由と、パフォーマンスの違いを正当化するそれらの違いを知っている人がいるということです。
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
)jre-abrt/bin/java
方が速い場合inotify
またはstrace
何かのようですが、これはおそらくこのようなサービスにとって非常に大きなものです.java.exe ファイルは実際には同じです。JDK は Java 開発キットであり、アプリケーションの開発に必要なすべての Java 実行可能ファイルが含まれています。
JRE は Java ランタイム環境であり、Java アプリケーションを実行するために必要なものが含まれています。
アプリケーションをデプロイ モードで実行する場合、エンド ユーザーは JDK ではなく JRE しか持っていない可能性が高いため、必要なのは JRE だけです。