java - 64 位操作系统上的 32 位 Java : is there a limit to number of JVMs?

标签 java 64-bit solaris 32-bit

我有一个 Solaris sparc(64 位)服务器,它有 16 GB 的内存。它上面运行着许多小的 Java 进程,但今天我在尝试启动一个新进程时遇到“无法为对象堆保留足够的空间”错误。我很惊讶,因为服务器上还有超过 4GB 的空闲空间。在其他一些进程关闭后,新进程能够成功启动;该系统肯定达到了某种上限。

在网上搜索解释后,我开始怀疑这是否与我使用的 32 位 JVM 有某种关系(此服务器上的所有 java 进程都不需要太多内存)。

我相信默认的最大内存池是 64MB,我运行了接近 64 个这样的进程。所以这将是 4GB 全部告诉......正好在 32 位限制。但我不明白这些过程中的任何一个为什么或如何受到其他过程的影响。如果我是对的,那么为了运行更多这些进程,我要么必须将最大堆调整为低于默认值,要么切换到使用 64 位 JVM(这可能意味着提高最大堆高于这些进程的默认值)。我不反对其中任何一个,但我不想浪费时间,现在它仍然是黑暗中的一枪。

谁能解释为什么它会这样工作?还是我完全错了?

如果我的解释是正确的,那么可能有关于此的文档:我非常想找到它。 (如果重要的话,我正在运行 Sun 的 JDK 6 update 17。)

编辑:我完全错了。下面的答案证实了我的直觉,我没有理由不能运行尽可能多的 JVM。过了一会儿,我在同一台服务器上尝试运行非 Java 进程时遇到错误:“fork:空间不足”。所以我遇到了一些不是特定于 Java 的限制。我必须弄清楚它是什么(不,它不是交换空间)。我最有可能转到 serverfault。

最佳答案

I believe the default max memory pool is 64MB, and I was running close to 64 of these processes. So that would be 4GB all told ... right at the 32-bit limit.

没有。 32 位限制是每个进程(至少在 64 位操作系统上)。但是 default maximum heap is not fixed at 64MB :

initial heap size: Larger of 1/64th of the machine's physical memory on the machine or some reasonable minimum.

maximum heap size: Smaller of 1/4th of the physical memory or 1GB.

Note: The boundaries and fractions given for the heap size are correct for J2SE 5.0. They are likely to be different in subsequent releases as computers get more powerful.

关于java - 64 位操作系统上的 32 位 Java : is there a limit to number of JVMs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135757/

相关文章:

regex - bash 正则表达式适用于 linux 但不适用于 solaris

java - 如何为 Android 设备统一实现 FCM 推送通知,即使游戏被终止也能正常工作

java - 如何在jar文件中创建内部方法

java - Android:程序在设备上没有错误地关闭

javafx检查场景中是否存在对象

c# - 无法在 DLL 'InterlockedIncrement' 中找到名为 'kernel32.dll' 的入口点 - VS2005@Win7 64 位

C 代码指针谜题

c# - 在 64 位 Windows 7 上运行 XNA 游戏时出现问题

Solaris门的Linux实现

ssl - 如何在 jndi 中启用 ldap over ssl