2012-08-08 57 views
1

我是Java新手,刚刚通过使用eclispe的MAT进行堆转储分析。所以我只想低于点 a)了解什么是浅的和保留的堆大小以及它是如何计算的?如果您提供示例,这将非常棒。 b)对于性能问题,大多数人建议我保持最小和最大堆大小相同,所以没关系,或者它对于应用程序的应用程序是主观的?如何计算保留的堆大小和浅堆大小?

+0

请参阅http://stackoverflow.com/questions/6862972/is-it-good-to-set-the-max-and-min-jvm-heap-size-the-same用于设置最小和最大值相同尺寸。 – Mark 2012-08-08 07:39:05

回答

4

浅堆是一个object消耗的内存。一个对象需要每参考32或64位(取决于操作系统体系结构),每整数4个字节,每龙等8个字节根据堆转储格式的大小可被调节

留存X的堆是保留的X组中所有对象的浅尺寸的总和,即由X保持活着的内存。

请参阅this链接。

1

JVM调整大小和调整不是一门精确的科学,因此,一揽子决定将最小和最大大小设置为相同并不一定是最佳配置。

我发现this是您需要做出的各种决定的绝佳解释。在解决你的问题时,它说:

将-Xms和-Xmx设置为相同的值可以通过从虚拟机中删除最重要的大小决定来提高可预测性。但是,如果您做出糟糕的选择,虚拟机将无法补偿。

如果设置的最小和最大相同,但有一个不恰当的大小伊甸园的空间,你可能仍然结束了可怜的垃圾收集的性能。

决定调整大小的唯一方法是在各种工作负载下运行您的应用程序并查看GC的执行情况。