2014-02-05 54 views
5

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

编辑:
在评论的光,我试过java -Xmx16g...,并没有崩溃我的机器。该程序仍然耗尽内存。我试过java -Xmx32g...,它确实让我的机器崩溃。

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

+3

当你尝试时发生了什么? –

+1

试试看看。 OS的提供[交换空间](http://en.wikipedia.org/wiki/Paging),使可用虚拟内存总量大于存在的物理内存量,只要不是所有的内存都需要同时页面可以被“换出”)。 – TypeIA

+0

16克?当真? – 2014-02-05 17:02:34

回答

2

这个有关maximum heap size的链接对您有帮助。

这取决于您的操作系统。

6

在虚拟机的堆内存由选项控制的大小 - X毫秒- XMX

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

分配在JVM本身内完成,而不是在OS上完成。当需要更多内存时,JVM会分配一块内存直到达到Xmx。

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

常见的是使用相同的值为X毫秒XMX, 使VM仅在执行开始时分配在操作系统存储器, 不依赖于OS特定行为


在你的情况,因为你设置32克为您的XMX和你的系统崩溃,看来你没有这个内存(SWAP +内存RAM)

如果手动更改您的系统的虚拟内存大小,配置将工作。

0

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

相关问题