- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 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/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个关于跨 JVM 的对象的对象 ID 的问题。即假设我已经持久化了一个在 JVM1 上创建的对象,现在我想在 JVM2 上使用相同的对象。 那么如何做到这一点。 对象的对象 ID 在两个 JVM
这是我在高中和大学计算机科学类(class)中经常听到的一句话: "That's not an issue for modern JVMs." 通常这会出现在关于整体性能或优化策略的讨论中。然而,它总
我正在尝试运行 JProfiler,以便我可以将它连接到 AIX 服务器上运行的 Apache Tomcat。我抓取了 AIX 的 tar 包并将其放在服务器上,然后将其解压缩。当我去bin目录下运行
当我试图通过运行 Java Mission Control (jmc) 来分析我的本地 Java 应用程序时,我无法连接到该应用程序。它在左侧 Pane 中显示的所有 JVM 进程的描述中显示“非热点
我有一个我们部署在集群上的应用程序。根据环境,集群可能有 2 或 4 个 JVM。 该应用程序具有我们在所有 JVM 上部署的相同 CamelContext。因此,所有 JVM 都有相同的路由。对于
在一个大量使用任务的项目中,我想记录“来自内部”的并行性。 在控制台上,我看到 GAE 正在自动启动新的成百上千个任务时的 JVM 实例(最多 10-12 个)排队。然后,它们运行良好。 但是,我想记
我正在使用 Mac OS X Yosemite 并且安装了 Java8 JRE 但是,当我启动 neo4j 时,它无法找到任何 JVM 的匹配版本 1.7 最佳答案 Neo4J 启动脚本查找 JAVA
描述: 我使用 Homebrew 在 MacBook 上安装了 Spark。我按照以下指示流程进行操作:https://www.tutorialkart.com/apache-spark/how-to
我被告知要制作一个 EJB 和普通 Java 程序(客户端),并尝试在两个不同的 JVM 中运行它们,并让它们执行。 “两个不同的 JVM”是什么意思? 最佳答案 您的要求: EJB (1) 的普通
我们正在升级遗留应用程序以使用 log4j2。因为应用程序服务器 (Weblogic 10.3.6.0) 不支持 servlet 3.0,所以我们的 servlet 2.5 达到了上限,最高可以达到
我有一个 Solaris sparc(64 位)服务器,它有 16 GB 的内存。它上面运行着许多小的 Java 进程,但今天我在尝试启动一个新进程时遇到“无法为对象堆保留足够的空间”错误。我很惊讶,
我在 2009 年 9 月 28 日提交了以下错误。遗憾的是,我仍然没有得到任何回应,规范的最终版本仍然不正确。这真的是一个错误吗?如果不是,为什么不呢?如果是,我该怎么办? 包含错误的部分是 5.4
如果是这样,怎么做? 我在 WebSphere Liberty 上使用 IBM 的 JSR 352 实现。 最佳答案 参见 this question获取配置信息。 就编程模型而言,需要考虑的一件事是
我是一名优秀的程序员,十分优秀!