如何在JVisualVM的堆转储中计算“大小”

时间:2019-02-06 19:44:08

标签: java string memory-management mule visualvm

我正在运行Java Visual VM,以分析Mule应用程序上的性能,以减少使用的内存量。当我查看堆转储时,发现char []的大小超过37 MB,String的大小超过28 MB。

我不清楚的是size列如何说明已使用的内存量。特别是,由于String是char []的抽象,所以我想知道这是否意味着28 MB的String中也存在37 MB的char数组中的一部分,或者它们是否单独分配。

最重要的是,我还有一个我怀疑正在占用大量内存并包含多个字符串的类,但是根据我的堆转储,此类仅使用堆中总内存的6.5%。 / p>

所以我想我的问题是...如果我想通过使用更少的String对象来提高自定义类的效率,我会发现Strings和Char [] s所使用的内存量有所减少,还是只针对特定班级?

谢谢!

1 个答案:

答案 0 :(得分:0)

霍尔格的评论就是我所需要的...

“大小仅包括对象本身的内存,不包括任何引用的对象(数组是对象)。”

仅此一项就使我对如何进行优化有了更好的了解。