我有一个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是我可以设置的最多,我的计算机运行程序)。
你知道为什么会有这么大的差异吗?
答案 0 :(得分:4)
我认为垃圾收集器更宽松,可以使用更多内存。
答案 1 :(得分:1)
要进行适当的比较,你应该:
最有可能的是,正如加里建议的那样,只是虚拟机在某个不同的时间跳转或选择GC,而不是在你看的时候。如果消费是“真实的”,那么热点(我猜测看待处理器高速缓存大小)的选择将你的java对象成员字段打包成一个连续的结构可能会有所不同 - 也许它正在添加
。平台上有几个字节的填充(对于你有很多对象),而不是另一个。