2011-07-18 55 views
3

如何確定一個單一的,特定的類定義(而不是實例化對象)有多大?具體而言,給定類使用多少PermGen內存?如果無法計算,它與未壓縮的.class文件的文件系統大小相對應的粗略程度如何?確定PermGen空間中單個Java類定義的大小?

我讀過Jon Masamitsu,什麼PermGen的成立:

  • 一個Java類的基本領域
  • 類(包括字節碼)類的
  • 名稱的
  • 方法(形式指向字符串也永久代的對象)
  • 常量池信息(從類文件中讀取數據的,看到的所有細節JVM規範的第4章)。與類關聯
  • 對象陣列和類型陣列(例如,包含的方法的引用的對象陣列)。
  • 由JVM(Java /郎/對象或Java例如/郎/異常)
  • 由編譯器(即時編譯器)用於優化的信息創建的內部對象

最後兩個可能不與個人階級定義有關。其餘的我感興趣。

唯一可能的逼近,我發現是java.lang.instrument.Instrument.getObjectSize(myObject.getClass());但「一些或全部」的描述讓我比準確性充滿信心少。有任何想法嗎?我覺得我正在俯視簡單的事情。

+0

的類是基礎類的一個代理。它不會讓你知道類有多大,而序列化JPanel會告訴你它在屏幕上使用了多少內存。 –

回答

3

你能做的就是看PermGen的大小的唯一事情是之前和加載類之後,但它仍然是它的方法獲得(重新)編譯使用更多的內存。