2012-04-15 69 views
0

我在32位Ubuntu系统上运行矿工服务器,如果我升级到64位什么是我可以给java的最大内存?我希望它具有大约12吉ram,但我不能在32位上做到这一点你可以给java的最大内存?

+0

如果您的堆大小小于32 GB,64位Java运行效率更高,但大多数处理器的理论限制为256 TB(虚拟内存限制)我创建的最大JVM内存大小为8 TB。 – 2012-04-15 07:04:16

回答

2

64位系统可以解决的ram数量实际上没有最大值。您将只能通过计算机的硬件停止。如果你在命令中使用了正确的开关,我不认为java有最大数量的所有RAM。

http://en.wikipedia.org/wiki/64-bit

+1

该限制与您的硬件无关。它直接关系到你的操作系统支持多少虚拟内存(我猜你可以争论与硬件有关,但不像你想的那样)。 – 2012-04-15 01:29:23

+1

这与硬件非常相关 - 从“软件”不是“内存”的意义上说,内存不是“软件”。基于处理器架构和对物理硬件的任何限制,O/S可以使存储器具有一定的地址可寻址性,但所有存储器页迟早要被物理存储器或某种形式的寻呼空间支持。 – 2012-04-15 02:06:41

0

Java Tuning白皮书:

对于一个32位的过程模型,该过程的最大虚拟地址大小通常是4 GB,尽管某些操作系统限制这2 GB或3 GB。对于2 GB限制,最大堆大小通常为-Xmx3800m(1600m)),但实际限制取决于应用程序。对于64位过程模型,最大值基本上是无限的。

但事实是,如此巨大的堆内存使用量(12GB)会适得其反。运行很长时间后,应用程序花费在垃圾回收上的时间将会消除可用内存太多的影响。

+2

这取决于。可以对Java进行编码,因此几乎没有垃圾收集,因此它不会让你的生活变得悲惨。 – 2012-04-15 01:32:52

+0

有人在糟糕的一天? Java不分配内存 - 它分配的内存可以是物理内存(RAM ...)或虚拟(调页空间等) – 2012-04-15 01:59:09

+0

Oscar:那么你是不是已经开始对我的答案进行周转和下调投票了?不成熟多少? – 2012-04-15 02:32:43

1

要说清楚,“硬件”包括分页/交换空间,所以如果你实际需要12GB的内存,只有8GB内存,你需要确保有4GB的备用交换空间,以便Java成功分配额外的内存。

+0

好吧,这个倒退是荒谬的。 实际限制取决于可用的物理内存,调页空间以及用户进程的任何资源限制。它不是“实质上无限的” - 迟早要允许的页面必须分配和支持某些东西。 – 2012-04-15 02:03:14

相关问题