web-dev-qa-db-ja.com

JVMの複数の異なる実装があるのはなぜですか?

Java本を読んでいるときに、私はこのフレーズに出くわしました:

異なるJVMは、まったく異なる方法でスレッドを実行できます。

基になるJVM実装によってコードの動作が異なることは完全に理解できますが、問題が生じます。

そもそもなぜJVMの複数の異なる実装があるのですか?

開発者として、Oracleが提供する公式のJVM実装に不満を感じて、別のJVMを構築することにしたのはなぜですか。

45
aMimikyu

開発者として、Oracleが提供する公式のJVM実装に不満を感じて、別の実装を構築することにしたのはなぜですか?

どれ? Oracleには、少なくとも3つの異なる公式のJVM実装があります。

JVM実装を開発する理由はいくつかあります。

  • プラットフォームのサポート:OracleがJVMを提供していないプラットフォームでJavaを実行します。これが、IBM J9が存在する主な理由です。たとえば、 。
  • リソース使用量:Oracle HotSpotを実行するのに十分なリソースがないデバイスでJavaを実行します。それが、Oracle SquawkとOracleが存在する理由ですKVM(「K」は「キロバイト」を表し、このJVMは数キロバイトのRAMしか搭載していないマシンで実行するように設計されていることを示します。HotSpotで試してください!) 、他の多く。
  • パフォーマンス:Oracle HotSpotは、十分な速度/スケーラブル/予測可能ではありません。これが、Metronome GCでAzul ZingまたはWebSphereが存在する理由です。
  • Licensing:Oracleのライセンスポリシーが気に入らないかもしれません。これが、Apache Harmony、およびGNUのJava実装作業(GCJ、クラスパス)を構成するさまざまなプロジェクト)が存在する理由でした。
  • 競争:単一文化は悪いです。競争は革新を刺激します。
  • 実行モード:事前コンパイルを好むかもしれませんか?それがExcelsior JETの存在理由です。
  • Research:Jikes RVMやOracle Maxineなど、多くのリサーチJVMがあります。
121
Jörg W Mittag

JVMは抽象概念です。これは、Java言語が「どこでも」仕様互換のランタイムエンジンの存在に依存することにより、プラットフォームに依存しないようにするために特別に設計されたソフトウェアレイヤーです。

しかし... 1つのサイズですべてに対応できるわけではありません。 Javaパワー不足の(しかし安価な)Androidスタイルの携帯電話などの非常に小さな環境に「くさび」で入れようとしている場合は、非常に多くの「コードを焼く」必要があるかもしれません。オフィシャルオラクル™が必要と判断したよりも、まだ存在しなかったJVM実装を開発する必要があるかもしれません。

したがって、JVMが多数存在するのはそのためです。 Theyはアーキテクチャおよび状況に固有であるため、Javaは必須ではありません。

0
Mike Robinson