【发布时间】:2019-02-06 19:44:08
【问题描述】:
我正在运行 Java Visual VM 来分析 Mule 应用程序的性能,以减少使用的内存量。当我查看堆转储时,我看到 char[] 的大小超过 37 MB,String 的大小超过 28 MB。
我不清楚的是 size 列如何解释使用的内存量。特别是,由于 String 是 char[] 的抽象,我想知道这是否意味着 37 MB 的 char 数组中的一些也存在于 28 MB 的字符串中,或者它们是否是单独分配的。
除此之外,我还有一个我怀疑占用大量内存并包含多个字符串的类,但根据我的堆转储,这个类只使用了堆中总内存的 6.5%。
所以我想我的问题是......如果我要通过使用更少的 String 对象来提高我的自定义类的效率,我会看到 Strings 和 Char[]s 报告使用的内存量减少吗?还是只针对特定的课程?
谢谢!
【问题讨论】:
-
大小仅包括对象本身的内存,不包括任何引用的对象(并且数组是对象)。您正在寻找的是“保留大小”; VisualVM 有显示它的选项,但它的计算可能需要一些时间,因为它必须找出是否有其他对同一对象的引用。
-
非常感谢我需要知道的一切。谢谢!
-
IIRC
jol也可以得到一些物体的尺寸(深尺寸)
标签: java string memory-management mule visualvm