2011-10-21 19 views
14

ホットスポットのJITについての講義では、JITが実行する特定の最適化の可能な限り多くの例を挙げたいと思います。ホットスポットJITの最適化

私は「メソッドインライン化」について知っていますが、さらに多くのものが必要です。すべての例に投票してください。

答えて

13

さて、Brian Goetzの記事をスキャンしてください。

簡単に言えば、ホットスポットは、となりますことができます。

  1. インラインメソッド
  2. は、同じオブジェクト
  3. に隣接​​ブロックに参加モニターが他のスレッド
  4. から到達可能でない場合は、ロックを排除デッドコードを排除(したがって、ほとんどのマイクロベンチマークは無意味です)
  5. ドロップメモリ​​書き込み不可変数
  6. 直接法は、一度だけ実装する方法を求めて
  7. はインターフェース呼び出しを交換し

エトセトラ

2

オペコードのJVM解釈ではなく、同等のネイティブマシンコードにジャンプします。 Javaアプリケーションの多用されている部分(JVMの拡張機能と同等)のマシンコード(JVM)をマシンコードでシミュレートする必要がないため、速度が向上します。

もちろん、それはHotSpotのほとんどです。

4

this articleにはまだ古いものの有効な概観があります。

ハイライトは利用できるランタイムプロファイリング情報に基づいて、古典的な最適化を実行しているように見える:

  • ネイティブコードへのJITting「ホットスポット」
  • 適応インライン化 - 指定したメソッドディスパッチのための最も一般的に呼ばれる実装をインライン化巨大なコードサイズを避けるために

そして、短命のオブジェクトを安価に割り当てる世代のGCや、他にもさまざまな小さな最適化に加えて、広告があったものその記事が出版されて以来

さらに詳細なofficial whitepaperと、かなりのJavaのコードを書く方法をリストアップした、かなりユースケースが最適化されているかどうかを推測できるようにする必要があります。HotSpot Internals wiki page

10

のJikes RVMサイト上で、現代のJVMで使用される最適化に大きな発表がある: ACACES’06 - Dynamic Compilation and Adaptive Optimization in Virtual Machines

は、アーキテクチャ、トレードオフ、測定、技術について説明します。また、マシンコードを最適化するためにJVMが行う20以上のことを挙げています。

+0

すばらしい!ありがとうございました。 – alf

+4

死んでいるようです。http://www.complang.tuwien.ac.at/andi/ACACES06.pdf – user60561

7

私は興味深いものは、従来のコンパイラがJITに反することができないものだと思います。メソッドのインライン化、デッドコードの除去、CSE、ライブ解析などあなたの平均的なC++コンパイラも同様です。ここでは特別なものはありません。

しかし、楽観的な仮定に基づいて何かを最適化し、後でそれらが間違っていると判明すると、 (特定のタイプを仮定していない場合には、後で失敗するブランチを削除します。)現時点でクラスが1つしか存在しないことを保証できれば、バーチャルコールを削除します。適応最適化とは、JITがミルC++コンパイラの実行と実際に区別されるということです。

JITで実行時プロファイリングを実行して、どの最適化を適用するかを分析することもできます(ただし、プロファイルに基づくすべての最適化ではそれほどユニークではありません)。

関連する問題