2013-02-22 6 views
7

私は、Class Data Sharingアーカイブを作成して(java -Xshare:dumpを実行して)、バイトコードをネイティブコードにコンパイルするかどうかを確認しようとしています。クラスデータ共有アーカイブ(classes.jsa)に保存されたJavaコードはネイティブにコンパイルされていますか、それともバイトコードですか?

クラスデータ共有の内部についての多くのドキュメントはありません。私がリンクしたページは、java -Xshare:dump

は、システムjarファイルからクラスのセットをプライベート内部表現にロードし、その表現をファイルにダンプすると言います。

しかし、このコードがコンパイルされているかどうかについては何も言いません。

(おそらく関連:Speed up application start by adding own application classes to classes.jsa

+0

IBM JVM for Java 6のように見えます。http://www.ibm.com/developerworks/library/j-sharedclasses/ –

答えて

2

どちらの場合も、それはキャッシュでネイティブコードだ(あなたは異なるアーキテクチャのマシン上でキャッシュを再生成については提供されたリンクでの議論を参照)。 IBM JVMは、より多くのオプションとクラスターのためのより良いレイアウトを提供しますが、Oracleも同様です。

+0

正確にはそれがネイティブ・コードであると言いますか? 「異なるアーキテクチャー」の問題は、クラスアーカイブファイルのレイアウトがOS(ptrsのサイズなど)に依存することを意味し、コードがネイティブにコンパイルされていることを直ちに暗示しません。 –

+0

中間段階がないためです。これは、ソース - >バイトコード - >ネイティブです。ネイティブのステップでのみ、エンジニアリングやワードサイズなどのことを気にします。ドキュメントでは、キャッシュクラスがJITコンパイルされたクラスほどパフォーマンスが悪いかもしれないということについても言及しています。これは、キャッシュされたクラスがそのまま実行可能であることを意味します。これは、JITが特定のハードウェアで利用可能なすべてのショートカットを利用するためです。互換性のあるアーキテクチャでもそのJVMの特定の実行パターンでも大きく異なる可能性があります。したがって、キャッシュから入ってくるクラスはそれ以上コンパイルされません。 – WPrecht

関連する問題