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

发布于 2024-09-09 11:35:38 字数 388 浏览 1 评论 0原文

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

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

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

你知道为什么差别这么大吗?

I have a java program that realizes a lot of mathematical operations and handle with a lot of object instances. But the most interesting I noticed is that in different computers, the memory comsuption is drastically different.

On a Intel Core 2 Duo (2Ghz) with 2Gb of ram and running WinXP 32bits- my program uses around 185mb of memory. The JVM properties are -Xms768m -Xmx1300m (If I set more than 1300m, I get an out of memory exception at runtime).

On a Turion X2 (2.1Ghz) with 3Gb of ram and running WinXP 32bits - my program uses around 380mb of memory. The JVM properties are -Xms768m -Xmx1600m (1600m is the most I could set that my computer run the program).

Do you know why such a big difference?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮光沉寂 2024-09-16 11:35:39

我想垃圾收集器会更宽松,有更多的内存可供使用。

I imagine the garbage collector is more lenient with more memory to play with.

荒岛晴空 2024-09-16 11:35:39

要进行正确的比较,您应该:

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

很可能正如 Gary 所建议的那样,只是虚拟机在与您查看时不同的时间跳跃或选择 GC。如果消耗是“真实的”,那么热点(我猜测它会查看处理器缓存大小)选择将 java 对象成员字段打包到连续结构中的方式可能会有所不同 - 也许它正在添加几个字节的填充(对于您有很多的某个对象)在平台上而不是在另一个平台上。

To do a proper comparison you should:

  • set the exact same VM parameters.
  • state if the VM is the same.
  • run the program with the exact same input parameters

Most likely it is as Gary suggests, just the VM jumping around or choosing to GC at some different time than when you are looking. If the consumption is 'real' it could be some difference in how hotspot (which I guess looks at processor cache sizes) chooses to pack your java objects member fields into a contiguous structure -- perhaps it is adding a few bytes of pad (to some object you have alot of) on on platform and not on the other.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文