私はC++コードをJavaに変換しています。私はインライン関数について何ができるのだろうかと思っていました。 VMが(必要なときに)関数をインライン化し、これについて心配しないと仮定することはできますか?この行動を観察するにはどうすればよいですか?メインの外部関数があるとし、その周りにforループを投げ、百万回の呼び出しを引き起こします。 VMのインライン化がますます進んでいくにつれて改善が見られるはずですか?ホットスポットVMインライン機能は必要に応じて機能しますか?
答えて
はいJavaはインラインメソッド呼び出しを行います。インライン展開はJITコンパイラによって実行されるため、バイトコードファイルを調べることで表示されません。
特定のメソッド呼び出しに対してインライン展開が実際に発生するかどうかは、メソッド本体のサイズと、呼び出しがインライン展開可能かどうかによって異なります。 (メソッド呼び出しにディスパッチが含まれる場合、JVMが不要なディスパッチを除去するように設計された大域最適化の束を持っている場合...インライン化できません)
外部主関数での例にも同じことが適用されます。メソッド本体の大きさによって異なります。他方、この方法が実行にかなりの時間を要する場合、最適化の相対的重要度は対応して減少する。
私の助言は、この段階でこのようなことを心配することではありません。コードをはっきりと簡単に書くだけで、JITコンパイラは最適化の問題に対処できます。アプリケーションが動作しているときに、そのアプリケーションをプロファイリングし、手作業で最適化する価値のある「ホットスポット」がコード内にあるかどうかを確認できます。
しかし、私は、Visual VMの右のようなものでこれを見ることができるはずですか?私は当初インライン展開がないことを意味していますが、より多くのものがインライン展開されるので、外部メソッドの平均時間はわずかに短縮されます。
メソッド本体を実行することに関連して呼び出しを行うのに費やされる時間に応じて、それが観測され、実際には発生しないことがあります。 (プロファイリングはしばしばプログラムカウンタのサンプリングに依存しますが、特定のコード領域のサンプル数が小さすぎると、報告された時間が不正確になる可能性があります...)
これはJVMにも依存します使っている。すべてのJVMが以前に最適化したコードを再最適化するわけではありません。
最後に、JITコンパイラが出力するネイティブコードをダンプするようにJVMを設定する方法があります。これは、機械命令を読む準備ができていれば、何がインライン化されているかについて決定的な答えを与えます。
- 1. アクションバーのバックボタンが必要に応じて機能しない
- 2. なぜsizeof Variablename/sizeof * VariableNameは必要に応じて機能しませんか?
- 3. 必要に応じて自動ロード機能/クラスライブラリ
- 4. 同じaddEventListenerは機能しますか?
- 5. ブロック機能は他のブロック機能のパラメータとして機能しますか?
- 6. Chromeインライン拡張機能のインストールが機能しない
- 7. F#インラインはどのように機能しますか?
- 8. Java内のインラインPerl ...インライン:: Java :: PerlInterpreterが機能しませんか?
- 9. 友人機能は同じファイル内にある必要がありますか?
- 10. テキストボックスのオートコンプリート機能を無効にする方法(また必要に応じて有効にする方法)
- 11. GCCインラインC++は 'inline'キーワードなしで機能しますか?
- 12. インラインにできるポイントフリー機能はありましたか?
- 13. Azure VM - エンドポイントが機能しない
- 14. Wicked_PDFのグレースケール機能は機能していますか?
- 15. WIX:プロパティに応じて機能を選択する方法
- 16. ラジオボタンに応じてラベルを隠す機能
- 17. iPhoneに必要なデバイス機能 - マルチタッチ
- 18. iOSに必要なデバイス機能オートフォーカスカメラ
- 19. 情報プロパティリストに必要なデバイス機能
- 20. LibSVM機能ベクトルの機能の順序は重要ですか?
- 21. 対象機能のカテゴリー機能はどのOOPS機能にありますか?
- 22. 反応ネイティブストレージはどのように機能しますか?ベースプリンシパル
- 23. jQueryの必要なフィールドバリデーションが機能していません
- 24. ubuntu 8.10用のVM追加機能?
- 25. 新しい機能はChromeの機能では機能しません
- 26. リポジトリには持続機能が必要ですか?
- 27. Xcodeのスナップショット機能は正常に機能していますか?
- 28. この機能割り当てはどのように機能しますか?
- 29. ステータス削除機能ガイダンスが必要
- 30. 全身タグマウスオーバー機能が必要
しかし、私はVisual VMのようなものでこれを見ることができるはずですか?私は当初インライン展開がないことを意味していますが、より多くのものがインライン展開されるので、外部メソッドの平均時間はわずかに短縮されます。 – Nikhil