コードのどの部分が最も頻繁に実行されるかを確認するにはどうすればよいですか?


11

何千行ものソースコードの中で最も頻繁に実行され、最も時間がかかるコードを確認したいと思います。これの目的は最適化のためです。

最適化には、コードのどの部分が最も頻繁に実行されるかを確認できることが重要です。これらの部分は、高速化のために焦点を合わせる必要があるためです。同時に、一部のコードは非常に頻繁に実行されますが、実質的に時間はかかりません。そのため、どのコードに最も時間がかかるかを確認することも重要です。

両方の長所は、実行されたすべての時間を含めて、コードにかかる時間を合計するプログラムになると思います(そのため、コード全体が最も遅くなる原因を見つけます)。これには一種のツールがありますか?


オペレーティングシステムまたはプログラミング言語を好みますか?
Mawgは、モニカを

回答:


15

あなたが探しているのはプロファイリングです:

ソフトウェアエンジニアリングでは、プロファイリング(「プログラムプロファイリング」、「ソフトウェアプロファイリング」)は、たとえばプログラムのスペース(メモリ)または時間の複雑さ、特定の命令の使用、または頻度を測定する動的プログラム分析の形式です。関数呼び出しの期間。プロファイリング情報の最も一般的な使用法は、プログラムの最適化を支援することです。

そのようなアプリケーションがいくつかあります。時には、これらはIDE自体に組み込まれます。netbeans ideは、プロファイラーが組み込まれたツールの1つです。 ここに画像の説明を入力してください

もう1つのこのようなツールはvisual vmです。

ここに画像の説明を入力してください

プロファイラーはさまざまな方法で動作できます-違いに注意する必要があります。1つのアプローチは、実行中のスレッドのスナップショットを取得して、各スレッドで現在呼び出されているメソッドを確認することです。これは、そこにあるもののサンプリングを使用します。

もう1つのアプローチは、Javaバイトコード計測して、開始時間と停止時間を別のアプリケーションに報告することです。

プロファイラを書くことは、熟練したJavaにとってそれほど難しくありません。IBMには、独自のプロファイラー(ソースコード付き)の作成に関する記事があります。これはJava Interactive Profilerに基づいています

無料と商用の両方のプロファイラーがあります(特定のメソッドが予想されるランタイムを超えたときにプロファイラーがレポート(メールまたはその他の通知)を実行できるJVMインスタンスにフックする方法はありますか? Webリクエストに時間がかかりすぎたときにレポートを返すプログラム-そのリクエストの履歴プロファイルは後で検査するために保存されていますか?)それらを見つけてそこから進むには、あなたが探しているものを知る必要があります。

プロファイラーを取得したら、プロファイリング結果の解釈に進みます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.