2012-02-23 11 views
1

私は、入力を読み取り、データ構造にデータを取り込んだりして計算を行うJavaアプリケーションを作成しています。実際の大きな入力では実行時間を支配するので、最終的な計算部分を最適化したい。巨大なインプットでアプリケーション全体をプロファイリングすることは永遠に続くでしょう。したがって、私はパフォーマンステストのために中程度のサイズの入力をロードしますが、入力と前処理時間がプロファイルを支配します。Javaアプリケーションの特定の部分/クラスのみをプロファイリングする

私が関心を持つJavaアプリケーションの一部だけをプロファイルするにはどうすればよいですか? 「これらの2つのクラスのみプロファイルする」と言う方法がありますか、プログラムで「ここでプロファイリングを開始する」ディレクティブを挿入しますか?

答えて

1

VisualVMを使用してコードをプロファイルすることができます。特定のクラスのプロファイリングだけはわかりませんが、VisualVmは既に実行中のプログラムを見ることができます。また、Eclipseを使用している場合は、Eclipseから起動するときにプロファイラを起動してプログラムにアタッチするためのランチャがあります。

EDIT:
私はいくつか見て、プロファイラ]タブでしたが設定]チェックボックスをオンにしています。これを選択すると、テキストボックスが表示され、CPU使用率のためにどのクラスをプロファイリングする必要があるかに関するフィルタを設定できます。

+0

私のフィルタとうまく配置された 'Thread.sleep(5000)'を保存するプリセットと組み合わせると、ジョブが完了します。 :)それはそれが芸術の状態ですが、悲しいです。 –

0

は、私はあなたのユニットテストを持っていると仮定して、あなたはちょうどあなたがプロファイリングに興味のある部分を行うユニットテストやアプリケーションを構築することができます。このようにして、パフォーマンスを調整することができます。のみ選択したクラスをプロファイリングするためとして

+0

ユニットテストは、非常に小さな入力でテストの正しさをテストします。それでもほとんどの時間は前処理に費やされます。意味のあるパフォーマンス数値を得るためには、大きな入力で実行する必要があり、負荷に時間がかかります。データがロードされていない状態でアルゴリズムをテストすることはできません。 –

+0

データはどれくらい現実的でなければなりませんか?多くの場合、生成されたデータは軽量であり、現実的なパフォーマンス結果を得ることができます。 –

+0

実際のデータが必要な場合は、実行前にプログラムを停止させ、プロファイリングを開始してプログラムを続行させることができます。このようにすれば、その時点から何が実行されているかをプロファイリングするだけです。 –

0

クラスの夫婦のみが計測されるように、ほとんどのプロファイラーは、フィルタを設定することができます。あなたはまた、特定のメソッドが呼び出されたときにプロファイリングを開始し、停止したいようなあなたの場合には

、それが聞こえます。

JProfiler

、あなたが希望する方法のため方法トリガを追加し、トリガーに3つのアクションを追加することができます。

  • スタート
  • (選択したCPUで)記録電流イベントを待つ仕上がりに
  • 録画を停止します(CPUを選択した状態で)。

トリガーの設定方法を示すthis screen castをご覧ください。

免責事項:私の会社はJProfilerを開発しています。

関連する問題