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

3
如何确定单个特定类定义(而不是实例化对象)的大小?具体来说,给定类使用多少PermGen内存?如果无法计算,它大致对应于未压缩的.class文件的文件系统大小?
我已经阅读了Jon Masamitsu关于PermGen所包含内容的文章:
- Java类的基本字段 - 类的方法(包括字节码) - 类的名称(以指向永久代中字符串的对象的形式) - 常量池信息(从类文件中读取的数据,请参见JVM规范的第4章获取所有详细信息)。 - 与类相关的对象数组和类型数组(例如,包含对方法引用的对象数组)。 - JVM创建的内部对象(例如java/lang/Object或java/lang/exception) - 编译器(JIT)用于优化的信息
最后两个可能与单个类定义无关。我对其余部分感兴趣。
我唯一找到的近似值是java.lang.instrument.Instrument.getObjectSize(myObject.getClass());,但描述中的“某些或全部”让我对准确性不太有信心。有什么想法吗?我觉得我可能忽略了一些简单的东西。

该类是底层类的代理。它并不能告诉你一个类有多大,就像序列化JPanel也无法告诉你它在屏幕上使用了多少内存一样。 - Peter Lawrey
1个回答

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接