最近,我正在编写一个类,在其中我发现我可以将实例的内存消耗减少约 10 字节/元素,但代价是使代码更加复杂。这将编译文件的大小增加了.class
约 10KB。
我假设 JVM 必须将.class
文件加载到内存中,因此除非至少有 1000 个左右的元素,否则这些更改不会为自己付出代价。但是除非类文件中额外的 10KB 是增加代码复杂性的唯一代价,否则这种算法是行不通的。
这个 Oracle 博客表明,permgen 中的类消耗了大量的额外内存,而不仅仅是基于.class
文件 - 例如,我怀疑更复杂的代码可能需要更多内存来优化元数据。
所以,这个问题有两个部分:
- 如何测量特定类的实际 permgen 内存消耗?是在运行时使用一些仪器,还是使用分析工具?
- 有没有办法在我写它的时候估计这个类的 permgen 内存消耗?(有了一些背景知识,您可以在编写类实例时估计它们的内存消耗;我想知道我们是否可以估计类本身的 permgen 内存消耗。)
Dalvik VM 的类似细节将不胜感激,但我主要关注 OpenJDK 和其他“主流”JVM。