在不同计算机上运行的Java程序中的内存消耗

时间:2010-07-14 17:23:46

标签: java runtime memory-management

我有一个java程序,它实现了很多数学运算并处理了很多对象实例。但我注意到最有趣的是,在不同的计算机中,内存消耗完全不同。

在带有2Gb ram和运行WinXP 32位的Intel Core 2 Duo(2Ghz)上,我的程序使用大约185mb的内存。 JVM属性为 -Xms768m -Xmx1300m(如果我设置超过1300m,我在运行时会出现内存不足异常)

在配备3Gb并运行WinXP 32位的Turion X2(2.1Ghz)上 - 我的程序使用大约380mb的内存。 JVM属性为 -Xms768m -Xmx1600m(1600m是我可以设置的最多,我的计算机运行程序)

你知道为什么会有这么大的差异吗?

2 个答案:

答案 0 :(得分:4)

我认为垃圾收集器更宽松,可以使用更多内存。

答案 1 :(得分:1)

要进行适当的比较,你应该:

  • 设置完全相同的VM参数。
  • 说明VM是否相同。
  • 使用完全相同的输入参数运行程序

最有可能的是,正如加里建议的那样,只是虚拟机在某个不同的时间跳转或选择GC,而不是在你看的时候。如果消费是“真实的”,那么热点(我猜测看待处理器高速缓存大小)的选择将你的java对象成员字段打包成一个连续的结构可能会有所不同 - 也许它正在添加

。平台上有几个字节的填充(对于你有很多对象),而不是另一个。