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