5

クラスがあり、このクラスのオブジェクトがシリアル化されたときに、どのサブオブジェクトが最も多くのスペースを占めるかを確認したいと思います。コードを見て手動で分析する以外に、それを行うための優れたツール/方法はありますか?

たとえば、ツールに「メンバーaが20%、bが30%、メンバーcが50%を占める」と言いたいとします。

ありがとう

PSいくつかの関連する質問を見つけましたが、そこで私の特定の質問に対する答えが見つかりませんでした。

4

3 に答える 3

1

オブジェクトのサイズをカウントする唯一の比較的高速な方法は、最初にオブジェクト全体を書き込み、使用状況をカウント (たとえば、ByteArrayOutputStream への書き込み) してから、参照される各オブジェクトを書き込むことです。

考慮すべき点がいくつかあります。

  • ObjectOutputStream は、以前に書き込まれたオブジェクトを単純なポインターで参照できるように、いくつかのキャッシュを行います。このキャッシュをクリアするには、reset() メソッドを使用します。
  • 書き込まれる新しい各オブジェクト タイプには、最初にクラスの説明があります。このオーバーヘッドは、参照している同じ型のオブジェクトの数によって異なります。
  • ObjectOutputStream を初期化するための (わずかな 4 バイトの) オーバーヘッドがあります。

プロトコルの説明については、この説明をお読みください。

于 2012-06-18T07:26:58.530 に答える
0

ええと、そのようなツールについて聞いたことがありません。しかし、メモリ内のオブジェクト サイズとシリアル化されたオブジェクト サイズの間には何らかの関係があると思います。したがって、JDK または私のお気に入りのYourKit Profilerに含まれているプロファイラーVisualVMを使用してみることができます。

于 2012-06-18T06:48:41.263 に答える