2011-07-18 3 views
3

特定のクラス定義(インスタンス化されたオブジェクトではない)の大きさはどのようにして決定されますか?具体的には、与えられたクラスはどのくらいのPermGenメモリを使用していますか?計算できない場合は、圧縮されていない.classファイルのファイルシステムのサイズにどれくらい対応していますか?私はPermGenが保持しているものにJon Masamitsuを、読んだPermGen空間で単一のJavaクラス定義のサイズを決定しますか?

:Javaクラスの

  • 基本フィールド
  • 形で(バイトコードを含む)クラスのクラスの
  • 名の
  • 方法(
  • 定数プール情報(クラスファイルから読み取られたデータ。すべての詳細については、JVM仕様の第4章を参照してください)。
  • クラスに関連付けられたオブジェクト配列と型配列(メソッドへの参照を含むオブジェクト配列など)。コンパイラ(のJIT)により最適化するために使用するJVM(Javaの/ LANG /オブジェクト又はインスタンスのJava/LANG /例外)
  • 情報によって作成
  • 内部オブジェクト

最後の二つの可能性ではないかもしれません個々のクラスの定義に関連しています。私は残りの部分に興味があります。

私が見つけた唯一の近似はjava.lang.instrument.Instrument.getObjectSize(myObject.getClass());ですが、説明の「一部または全部」は正確さに自信がありません。何か案は?私は単純なものを見落としているように感じる。

+0

クラスは、基礎となるクラスのプロキシです。シリアライズよりもクラスがどれほど大きいか分かりません。JPanelは画面上でどれだけのメモリを使用するかを教えてくれます。 –

答えて

3

あなたができる唯一のことは、クラスをロードする前後のPermGenのサイズを見ているだけですが、そのメソッドが取得(再)されるにつれ、より多くのメモリを使い続けます。

関連する問題