这个问题与Java Refuses To Start - Could Not Resrve Enough Space for Object Heap有关,应该很容易解决。然而,我的搜索没有发现任何有用的东西。
本质上,我们有2个32位操作系统(RedHat&SuSE)在不同的机器上,使用相同的硬件。两者都使用相同的JVM,都执行相同的命令行。RedHat工作得很好,但是SuSE报告内存不足。
我们只需要知道这是否是我们正在使用的SuSE版本的一个限制,或者是其他什么东西。
“cat/proc/version”为我们提供了:
Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005
“uname-a”为我们提供了两种类型机器上的以下信息:
UTC 2005 i686 i686 i386 GNU/Linux
最佳答案
JVM内存限制与可用的最大可用连续块有关,而不是与可用内存量有关。这个限制从大约1.4 GB到超过2.0 GB,取决于操作系统在内存中的位置。我不知道Redhat或Suse在哪里将数据加载到内存中,但可能是Suse正在将某个库映射到RAM中间的一个地址,Redhat可能会在最后映射到这个地址(推测)。
记住,java中的实际内存使用量比为Xmx指定的要多。其他内存设置也会影响堆的大小(如permgen)。因此,Suse上的perm空间的默认值可能比Redhat上的更大。
另外,根据应用程序的内存分配配置文件,您可能会使用较小的堆大小和不同的垃圾收集选项。这里(http://java.sun.com/performance/reference/whitepapers/tuning.html)和其他地方有一些细节。例如,如果您分配了许多小的临时块,您将需要不同的GC设置,而不是有许多位的长寿命对象。
关于链接的问题,为什么不直接使用Redhat呢?这可能是一个简单的解决方案,但我保证它比深入研究java调优和OS内存管理的神秘世界更快地解决您的问题:P
关于linux - SuSE Linux的最大Java堆空间是多少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1059232/