JVM内存中特定对象的子树的大小

时间:2013-08-23 13:11:37

标签: java jvm heap-memory

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

  

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

我想知道我是否可以通过这种方式比较两个JPanels(或JFrame或其他)需要多少内存,而且需要更多内存 - 而不分析转储。而且我想知道答案是否为'是'这个值的确切程度。

2 个答案:

答案 0 :(得分:3)

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

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

第一种方法是使用附加到jvm的java代理,后者又调用sun / oracle从java 6开始添加的size estimation function。有关说明,请参阅this page

第二种方法是基于理论计算估计对象树的大小。有一个库可以为您here

执行此操作

答案 1 :(得分:1)

您可以检查JAMM,它是用于测量对象大小的java代理。您可以找到教程here如何使用它。