2

独自のJavaプロファイラーを作成する必要があります。CPUプロファイリングの部分は、IBMの独自のプロファイラー記事を作成することで行われました。次に、メモリプロファイリングについても同様の種類をチェックします。検索でHprofが見つかりましたが、私には役に立ちませんでした。私が欲しいのは、クラスの各メソッドによって消費されるメモリをバイト単位で取得することです

例:

クラスtest1、クラスtest2などがJavaファイルにあると考えてください

method1()test1に存在します

method2()test2に存在します

多くの変数が各メソッド内で宣言されるので、私が欲しいのは次のようなものです

test1 / method1 = 12バイト(可能であれば、トレースを表示します。つまり、これだけの文字数+整数数など)

test2 / method2=18バイト

助けてください

4

1 に答える 1

1

特定のメソッドがスタックで使用するメモリの量に関心がある場合、クラス ファイルには、これに関する情報を提供する2 つの属性があります。

max_localsローカル変数用に予約されているスペースの量を示します (32 ビット単位で、つまり 4 を掛けてバイトを取得します)。

max_stackこのメソッドの実行中にオペランド スタックが拡張できる最大値を示します。

これら 2 つを加算すると、このメソッドを呼び出した場合にスタックがどれだけ大きくなるかについての概算が得られます。これらの値に加えて、追加の (おそらく一定の) オーバーヘッドがありますが、これらは主要な変動要因であるはずです。

BCELなどのバイト コード操作ライブラリを使用して、.class ファイルを読み取り、それらの属性を抽出できます。

于 2012-05-29T07:25:26.220 に答える