JVMの実装にはまったく関与していないため、実際の理由はわかりませんが、いくつかのもっともらしい理由を考えることができます。
- Java の考え方は、write-once-run-anywhere 言語であることであり、プリコンパイルされたものをクラス ファイルに入れることは、一種の違反です (もちろん、実際のバイト コードはまだそこにあるため、"ある種" にすぎません)。
- 同じコードが複数回存在するため、クラス ファイルのサイズが大きくなります。特に、複数の異なる JVM で同じプログラムを実行する場合 (異なるバージョンが異なる JVM であると考えると、これは珍しいことではありません)。本当にしなければならない)
- クラスファイル自体は書き込み可能ではない可能性があります(ただし、それを確認するのは非常に簡単です)
- JVM の最適化は部分的に実行時の情報に基づいており、他の実行では適用できない場合があります (ただし、いくつかの利点はあるはずです)。
しかし、私は本当に推測していて、ご覧のとおり、私の理由のどれも実際のショーストッパーではないと思います. Sun はこのサポートを優先事項とは考えていないだけだと思います。私の最初の理由は真実に近いかもしれません。クロスプラットフォーム。
私の好みの方法は、実際には、このようなことを事前に明示的に行うために使用できる別のバイトコードからネイティブへのトランスレーターを用意し、特定の VM 用に明示的にビルドされたクラス ファイルを作成し、おそらく元のバイトコードを含めて、異なる VM でも実行できます。しかし、それはおそらく私の経験から来ています.