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