単一の特定のクラス定義 (インスタンス化されたオブジェクトではない) の大きさを確認するにはどうすればよいですか? 具体的には、特定のクラスが使用する PermGen メモリの量は? 計算できない場合、圧縮されていない .class ファイルのファイルシステム サイズにどの程度対応していますか?
PermGen が保持するものについて、Jon Masamitsuを読みました。
- Java クラスの基本フィールド
- クラスのメソッド (バイトコードを含む)
- クラスの名前 (永久世代でも文字列を指すオブジェクトの形式で)
- 定数プール情報 (クラス ファイルから読み込まれたデータ。詳細については、JVM 仕様の第 4 章を参照してください)。
- クラスに関連付けられたオブジェクト配列と型配列 (メソッドへの参照を含むオブジェクト配列など)。
- JVM によって作成された内部オブジェクト (java/lang/Object または java/lang/exception など)
- コンパイラーによる最適化に使用される情報 (JIT)
最後の 2 つは、個々のクラス定義に関連しない可能性があります。私は残りに興味があります。
私が見つけた唯一の可能な近似値はjava.lang.instrument.Instrument.getObjectSize(myObject.getClass()); です。しかし、説明の「一部またはすべて」では、正確さに自信が持てません。何か案は?シンプルなものを見落としているような気がします。