确定PermGen空间中单个Java类定义的大小?

时间:2011-07-18 19:00:56

标签: java class memory-management garbage-collection permgen

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

我读过Jon Masamitsu,关于PermGen的内容:

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

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

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

1 个答案:

答案 0 :(得分:3)

你唯一能做的就是在加载一个类之前和之后查看PermGen大小,但是当它的方法得到(重新)编译时它会继续使用更多的内存。