3

単一の特定のクラス定義 (インスタンス化されたオブジェクトではない) の大きさを確認するにはどうすればよいですか? 具体的には、特定のクラスが使用する PermGen メモリの量は? 計算できない場合、圧縮されていない .class ファイルのファイルシステム サイズにどの程度対応していますか?

PermGen が保持するものについて、Jon Masamitsuを読みました。

  • Java クラスの基本フィールド
  • クラスのメソッド (バイトコードを含む)
  • クラスの名前 (永久世代でも文字列を指すオブジェクトの形式で)
  • 定数プール情報 (クラス ファイルから読み込まれたデータ。詳細については、JVM 仕様の第 4 章を参照してください)。
  • クラスに関連付けられたオブジェクト配列と型配列 (メソッドへの参照を含むオブジェクト配列など)。
  • JVM によって作成された内部オブジェクト (java/lang/Object または java/lang/exception など)
  • コンパイラーによる最適化に使用される情報 (JIT)

最後の 2 つは、個々のクラス定義に関連しない可能性があります。私は残りに興味があります。

私が見つけた唯一の可能な近似値はjava.lang.instrument.Instrument.getObjectSize(myObject.getClass()); です。しかし、説明の「一部またはすべて」では、正確さに自信が持てません。何か案は?シンプルなものを見落としているような気がします。

4

1 に答える 1

3

あなたができる唯一のことは、クラスをロードする前後の PermGen のサイズを確認することですが、メソッドが (再) コンパイルされるにつれて、より多くのメモリを使用し続けます。

于 2011-07-18T19:10:29.513 に答える