我是 Java 新手,我刚刚使用 eclispe 的 MAT 进行了堆转储分析。所以我只想了解以下几点 a) 了解什么是浅堆和保留堆大小以及它是如何计算的?如果您提供示例,那就太好了。b)对于性能问题,大多数人建议我保持最小和最大堆大小相同,这样可以吗?还是对应用程序的应用程序是主观的?
问问题
3247 次
2 回答
4
浅堆是一个 消耗的内存object
。一个对象每个引用需要 32 位或 64 位(取决于操作系统架构),每个整数需要 4 个字节,每个长整型需要 8 个字节等。根据堆转储格式,可以调整大小
X 的保留堆是 X 的保留集中所有对象的浅层大小的总和,即由 X 保持活动的内存。
参考这个链接。
于 2012-08-08T07:38:01.410 回答
1
JVM 大小调整和调优不是一门精确的科学,因此一揽子决定将最小和最大大小设置为相同不一定是最好的配置选择。
我发现这很好地解释了您需要做出的各种决定。在解决您的问题时,它说:
将 -Xms 和 -Xmx 设置为相同的值可以通过从虚拟机中删除最重要的大小决定来提高可预测性。但是,如果您做出错误的选择,虚拟机将无法进行补偿。
如果您将最小值和最大值设置为相同,但 Eden 空间大小不合适,则最终可能会导致垃圾收集性能不佳。
决定大小的唯一方法是在各种工作负载下运行您的应用程序并查看 GC 的执行情况。
于 2012-08-08T07:54:04.007 回答