Javaコード、シングルスレッド、ローカル、複雑なアルゴリズム)のパフォーマンス測定(主にランタイム)を実行したい(したがって、マクロベンチマークでJVM実装を測定したくない。)
ツールを使用して、
このために、私はツールまたはフレームワークを使用したいと思います
どのようなツール/フレームワークがこれらの要件を満たしていますか?どれが複雑さと傾向分析に適していますか、そしてなぜですか?
以下は、私が見つけたすべてのツールのアルファベット順のリストです。言及されている側面は次のとおりです。
パラメータ化可能; Perlライブラリ; JVMマイクロベンチマークなし。プロット;持続;トレンド分析!?;適切な統計(結果が安定するまで特定のテストを実行し、外れ値を強調表示します)。
パラメータ化できません。 Javaライブラリ; JVMマイクロベンチマーク;プロットなし;持続性なし;傾向分析なし;統計。
統計は非常にうまく機能します:平均、最大、最小、標準偏差に加えて、95%信頼区間(ブートストラップを介して)とシリアル相関(たとえば、プログラムが非決定的に動作する場合に発生する可能性がある発振実行時間について警告するため)も計算します。 HashSetを使用するためです)。正確な測定値を取得するためにプログラムを反復する必要がある頻度を決定し、レポートと警告(たとえば、外れ値とシリアル相関について)のためにこれらを解釈します。
また、マイクロベンチマークは非常にうまく機能します(詳細については、 javaを使用して迅速で信頼性の高いベンチマークを作成しますか? を参照してください)。
残念ながら、フレームワークは、他の多くのヘルパークラスと一緒にバンドルされたutilパッケージに含まれています。ベンチマーククラスは、JSci(Java用のScience API)とMersenne Twister( http://www.cs.gmu.edu/~sean/research/ )に依存しています。著者のBrent Boyerが時間を見つけた場合、ライブラリを煮詰め、より簡単なグラファーを追加して、ユーザーが測定値を視覚的に検査できるようにします。相関と外れ値。
パラメータ化可能; Javaライブラリ; JVMマイクロベンチマーク;プロット;持続;傾向分析なし;統計。
Androidアプリ向けに調整された比較的新しいプロジェクト。若く見えますが有望です。GoogleGuavaに依存します:(
パラメータ化できません!?; Javaライブラリ; JVMマイクロベンチマークなし!?;プロット;サーブレットによる永続化;傾向分析なし!?;統計なし!?。
AOPインスツルメンテーションをサポートします。
パラメータ化できません。 Javaライブラリ、JVMマイクロベンチマークなし、追加のツール(JarepまたはJMX)によるプロット、持続性、および傾向分析);統計。
Log4jと絡み合った適切な監視により、データにプログラムでアクセスまたはクエリを実行し、プログラムが結果に対してアクションを実行することもできます。
パラメータ化できません!?; Javaライブラリ; JVMマイクロベンチマークなし; Jarepでのみプロット; JMXでのみ持続;傾向分析なし;統計なし!?。
Jamonのライバルは、モニターの階層をサポートします。
パラメータ化できません。 Javaライブラリ; JVMマイクロベンチマーク;プロット;持続;傾向分析なし;統計なし。
素敵な軽量監視ツール、依存関係なし:)十分な統計(標準偏差なし)を提供せず、それに応じてプラグインを拡張することは非常に困難に見えます(アグリゲーターとアグリゲートには、最小、最大、平均の固定ゲッターしかありません)。
パラメータ化可能!?; Javaライブラリ; JVMマイクロベンチマークなし!?;プロット;持続性;傾向分析!?;統計!?。
Webアプリケーションの負荷テストに合わせて調整された優れた監視ライブラリ。
Java Microbenchmark Harness(jmh
)
パラメータ化可能(Java API)によるカスタム呼び出し元); Javaライブラリ; JVMマイクロベンチマーク;プロットなし;持続性なし;トレンド分析なし;統計。
オラクルのHotSpotエキスパートによって構築されたベンチマークハーネスは、OpenJDKパフォーマンス作業で使用されるHotSpotでのマイクロベンチマークに非常に適しています。信頼できるベンチマーク環境を提供するために、極端な対策が講じられています。人間が読める出力に加えて、jmhは、結果を処理するためのJava APIなどを提供します(サードパーティのプロッタや永続化プロバイダなど)。
パラメータ化可能; Javaライブラリ; JVMマイクロベンチマーク;プロット;持続性(CONSOLE、XMLまたはデータベースH2を使用)、グラフィカルな傾向分析、統計(最大、最小、平均、標準偏差;ただし、さらに拡張するのは容易ではない)統計)。
Junit-4-ruleをjunitテストに追加するだけです:)
junit-Benchmarksはオープンソースであり、Apache 2ライセンスに基づいています。
Update:プロジェクトが jmh
に移動しました
主に、パフォーマンス(JUnitテストデコレータTimedTest
を使用)およびスケーラビリティ(JUnitテストデコレータLoadTest
を使用)の傾向分析を行うためのものです。
パラメータ化可能; Javaライブラリ、JVMマイクロベンチマークなし、プロットなし、持続性なし、統計なし。
パラメータ化できません。 Javaライブラリ; JVMマイクロベンチマークなし;プロット; JMXによる永続化; log4jアペンダーによる傾向分析;統計。
ロギングフレームワーク上に構築され、AOPを使用できます。
非常に一般的な概念:モニターは事前定義された条件を監視し、条件が満たされた場合の対応方法を指定します。
主な焦点はパラメータ化可能性です。アルゴリズムがスケーリングするかどうかを確認します。つまり、O(n)、O(n log(n))、O(n²)であるかどうかを確認します...
Javaライブラリ; JVMマイクロベンチマーク。プロットなし;持続;トレンド分析;統計なし。
パラメータ化可能; Jythonライブラリ。 JVMマイクロベンチマークなし。プロット;持続;傾向分析なし。良い統計はありませんが、簡単に拡張できます。
Jython、HTTPClient、JEditSyntax、ApacheXMLBeans、PicoContainerに依存します。
パラメータ化可能!?; Javaツールプラットフォーム; JVMマイクロベンチマークなし!?;プロット;持続性;グラフィカルトレンド分析;統計なし!?
Test&Performance Tools Platformは、(Eclipseと4つのEMFモデルに基づく)汎用で拡張可能な巨大なツールプラットフォームです。したがって、強力ですが非常に複雑で、Eclipseの速度を低下させ、あなた自身のニーズ(例えば、統計が反復の数に影響を与えるようなもの)は非常に難しいようです。
パラメータ化可能!?; Javaライブラリ; JVMマイクロベンチマークなし;プロット;持続性;傾向分析!?;統計!?。
このツールは、大規模なクラスターでの監視に合わせて調整されています。
別の選択肢は、Googleの caliper です。 パラメータ化されたテスト を許可します。
http://labs.carrotsearch.com/junit-benchmarks.html を使用してみてください。これはJUni4の拡張であり、機能は次のとおりです。
実行時間の平均と標準偏差を記録します。
ガベージコレクターのアクティビティの記録。
ベンチマークごとのJVMウォームアップフェーズ。
実行ごとの履歴グラフの生成。
H2 SQLデータベースでのオプションの結果の永続性(高度なクエリ、履歴分析)。