我可以分配多少内存?

时间:2014-02-05 16:59:11

标签: java memory ram

如果我的机器上有16 GB的RAM,我可以分配给我正在执行的java命令行程序多少?我认为java -Xmx 16g...会使我的系统崩溃吗?

修改
根据评论,我尝试了java -Xmx16g...,并没有让我的机器崩溃。该程序仍然耗尽内存。我试过了java -Xmx32g...,这让我的机器崩溃了。

从下面的评论(这真的很有启发性),我想我只需要继续玩分配。

3 个答案:

答案 0 :(得分:7)

虚拟机堆内存的大小由选项 - Xms 控制 和 - Xmx

第一个指定初始堆大小和第二个最大大小。

分配在 JVM本身内完成,而不是在操作系统上完成。由于需要更多内存,JVM会分配一块内存,直到达到Xmx。

如果您需要更多,则会抛出OutOfMemoryError。

对于 Xms Xmx 使用相同的值是很常见的, 导致VM仅在执行开始时在操作系统中分配内存, 不依赖于操作系统特定行为


在您的情况下,由于您将32g设置为Xmx并且系统崩溃,因此您似乎没有此内存(交换+内存ram)

如果手动更改系统的虚拟内存容量,配置将起作用。

答案 1 :(得分:2)

这个关于maximum heap size的链接对您有用。

这取决于您的操作系统。

答案 2 :(得分:0)

您的操作系统无法分配超过16GB的内存,因此系统崩溃。除了另一个答案中陈述的XMX和XMS之外,还有一个-XX:+ AggressiveHeap选项,用于检查机器资源(内存大小和处理器数量),并尝试将各种参数设置为长时间运行的最佳内存分配密集型工作