1

是否可以以编程方式检查某个对象占用了多少内存(整个子树在 JVM 内存中)。我想说(来自java代码)

'告诉我当我们假设提到的 JPanel 是这棵树的根时,当前 JVM 中有多少内存占用了 JPanel 和整个引用子树'。

我想知道我是否可以通过这种方式比较两个 JPanel(或 JFrame 或其他)占用多少内存,而哪个占用更多内存 - 而无需分析转储。我想知道答案是否是“是”,这个值有多精确。

4

2 回答 2

3

正如对您的问题的评论中所述,java中的sizeOf问题不容易解决,不仅因为您尝试调整大小的对象实际上不是内存图的根,还因为计算静态字段的大小存在问题等(它们属于整个类,而不是任何特定实例)。

但是,有一些方法可以获得一些有意义的数据。

第一种方法是使用附加到 jvm 的 java 代理,该代理又调用sun/oracle 从 java 6 开始添加的大小估计函数。有关说明,请参阅此页面

第二种方法是根据理论计算来估计对象树的大小。有一个图书馆在这里为你做这件事

于 2013-08-23T13:21:13.000 回答
1

您可以检查JAMM,这是一个用于测量对象大小的 Java 代理。您可以在此处找到如何使用它的教程。

于 2013-08-23T13:44:40.173 回答