1

JDK 6のfastdebugビルドをインストールし、次のコマンドを実行しました。

java -XX:+PrintCFGToFile Test

しかし、印刷された情報を含むファイルが見つかりませんでした... LinuxとWindowsの両方の運用システムで試しましたが、成功しませんでした。諦めた後、ソース(OpenJDK 7ソース、Ubuntu)からJDKをビルドしましたが、成功しませんでした。同じように、印刷"VM option '+PrintCFGToFile'"されますが、クラスが実行されたディレクトリにも、JDKbinディレクトリにもファイルが作成されませんでした。ファイルシステムの.cfg"、何も見つかりません...ソースを確認しましたが、ファイルの名前は実際には" output.cfg "のようです(間違っていない場合はCFGPrinterです)。

どうしたの?追加のオプションを指定する必要がありますか?制御フローグラフ情報を含むこのファイルをどこでどのように取得しますか?

4

2 に答える 2

1

さて、OpenJDKメーリングリスト、特に私のこの質問に答えてくれたKrystal Mokに感謝します。この質問に答えないままにせず、コミュニティと共有してください。

HotSpotには2つのJITがあります:
1)C1別名クライアントJIT
2)C2別名サーバーJIT
(Ubuntuを使用したため)、HotSpotはC2コンパイラーを使用し、PrintCFGToFileはC1にのみ適用されます。

現在のプラットフォームでこのフラグが機能することを本当に確認したい場合は、-XX:+TieredCompilationをオンにすることをお勧めします

アドバイスだったので、解決策は次のとおりです。

java -XX:+PrintCFGToFile -XX:+TieredCompilation Test

それを実行すると、クラスが実行されたフォルダーにoutput.cfgファイルが表示されます(期待どおり)

元の回答(およびスレッド)

于 2012-02-14T20:02:54.443 に答える
0

C1/C2については正しいです。そして、JITによってコンパイルされたメソッドのみがCFGを生成でき、-XX:+PrintCompilationopttionはどのメソッドがコンパイルされたかを報告できます。

于 2012-03-27T15:25:08.343 に答える