如果我的机器上有 16 GB 的 RAM,我可以为正在执行的 Java 命令行程序分配多少内存?我假设 java -Xmx 16g...
会使我的系统崩溃?
编辑:
鉴于评论,我尝试了 java -Xmx16g...
,但它并没有使我的机器崩溃。该程序仍然内存不足。我尝试了 java -Xmx32g...
,它确实让我的机器崩溃了。
从下面的评论(非常有启发性)来看,我想我只需要继续尝试分配。
最佳答案
虚拟机的堆内存大小由选项-Xms控制 和 - Xmx 。
第一个指定初始堆大小,第二个指定最大大小。
分配是在 JVM 本身 内完成的,而不是在 OS 上完成的。当需要更多内存时,JVM 会分配一 block 内存,直到达到 Xmx。
如果您需要更多,则会抛出 OutOfMemoryError。
Xms 和 Xmx 通常使用相同的值, 导致虚拟机仅在执行开始时在操作系统中分配内存, 不依赖于操作系统特定行为。
在你的情况下,由于你将 32g 设置为你的 Xmx 并且你的系统崩溃了,看来你没有这个内存(交换 + 内存 ram)
如果您手动更改系统的虚拟内存大小,配置将起作用。
关于java - 我可以分配多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583575/