3

如何确定单个特定类定义(不是实例化对象)有多大?具体来说,给定类使用多少 PermGen 内存?如果无法计算,它与未压缩的 .class 文件的文件系统大小大致对应多少?

我读过Jon Masamitsu,关于 PermGen 的观点:

  • Java 类的基本字段
  • 类的方法(包括字节码)
  • 类的名称(以指向字符串的对象的形式,也在永久代中)
  • 常量池信息(从类文件中读取的数据,所有详细信息请参见 JVM 规范的第 4 章)。
  • 与类关联的对象数组和类型数组(例如,包含对方法的引用的对象数组)。
  • JVM 创建的内部对象(例如 java/lang/Object 或 java/lang/exception)
  • 编译器 (JIT) 用于优化的信息

最后两个可能与单个类定义无关。我对其余的感兴趣。

我发现的唯一可能的近似值是java.lang.instrument.Instrument.getObjectSize(myObject.getClass()); 但是描述中的“部分或全部”让我对准确性缺乏信心。有任何想法吗?我觉得我忽略了一些简单的事情。

4

1 回答 1

3

您唯一能做的就是查看加载类之前和之后的 PermGen 大小,但是随着它的方法被(重新)编译,它会继续使用更多内存。

于 2011-07-18T19:10:29.513 回答