2016-08-31 3 views
-1

インターネットでしばらく検索したところ、バイトコードをコンパイルして実行するかバイトコードを解釈するためにJITを使用する必要があるかどうかをJVMが判断する完全な答えは見つかりませんでした。要するにJITを使用するか、バイトコードを解釈するかをJVMが決定する方法

は、このオプションのうちいずれかのデフォルトがあり、私は

> javac xyz.java  
> java xyz 

となし、他のパラメータが何を実行します、JITまたはインタプリタ言えば、意味?

質問が広すぎるために保留されていますので、私はそれを簡潔にしておきます.JITや通訳の仕組みを理解したくない、どちらの方法を決定するかJITの解釈や使用。私は、この決定を下す際に重要なパラメータ(プログラムサイズ、実行環境など)を知りたいだけです。 (あなたはJavaソースのうち、静的な「ネイティブコード」のバイナリを作成する非常に特別な製品の話をしない限り、ウェル)事前に答えを

おかげ

+0

最新のJVMのほとんどはJITをサポートしていますが、すべてのJVMがJITサポートを提供することは必須ではありません。ほとんどの場合(他の手法はありますが)、JITは、コードの一部(通常はメソッド)が特定の回数(JIT閾値)呼び出されたとJVMが判断したときに起動します。例えば、HotSpot VMは、JIT閾値が1,500(同じ方法の呼び出し)である「クライアント」と閾値が10,000である「サーバ」の2つのモードを有する。 [このプレゼンテーション](http://www.slideshare.net/ZeroTurnaround/vladimir-ivanovjvmjitcompilationoverview-24613146)に詳細が記載されています。 – manish

+0

それは質問です。私がjava xyzと言うときはいつ、誰がコントロールの最初のインタプリタかJITを取るのですか?限界に達した後にJITが開始されたとUが言ったように、それは通訳が働くまで意味します。右? @manish –

+0

これらの人々が好きな理由を理解できません:@aviadは質問を保留にしました。あなたが質問に答えることができないなら、少なくとも他の人にそれを話してもらいましょう。ディスカッションは常に良い結果をもたらします。 –

答えて

1

javacは、Javaコンパイラは常にバイトコードを作成します。

JVM内のネイティブコードにコンパイルするために、実行時に決定が行われます。

意味:JVMがバイトコードの解釈を開始します。それはそれをしながら統計を保持します。さまざまな経験則に応じて、JVM/JITはある時点でバイトコードをネイティブコードにコンパイルすることを決定します。つまり、JVMプロセスが終了すると、そのネイティブコードはすべて失われます。

JITをこのような興味深い技術にするひとつの事実は、事態が変わると、JITはネイティブに「再コンパイル」さえできるという事実です。異なる最適化が理にかなっていると考えられる場合

さらなる読取りは、例えばhereで見つけることができます。

+0

あなたの答えからは、デフォルトではJITは制御されており、最適なJITやインタプリタを見つけるために異なる実行計画を実行していますか? –

+0

さて、JITはJVM内のコンポーネントです。私はそう言うことができると思います。私の更新された答えを見てください。 – GhostCat

+0

JVMが保証できる唯一のことは、機能Xがオフの場合、使用されないことです。しかし、それがオンになっている場合、それが使用される保証はありません。実際、同じコードを2回実行すると、同じ最適化が適用されるという保証はありません – TheLostMind

関連する問題