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

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

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

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

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

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

第一种方法是使用附加到jvm的java代理,后者又调用sun / oracle从java 6开始添加的大小估计函数 。请参阅此页面以获取指示

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

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