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