为什么即使将xms设置为大于物理内存,java进程也可以启动?

时间:2016-10-24 07:07:51

标签: java memory

我尝试测试java应用程序可以启动或创建,以便预先检查xms / xmx配置。 我刚写了一个简单的类,没有什么只打印hello world,并运行以下命令:

javac -Xms3000m A

它成功了,我用了#m; free -m'获得免费记忆。

[root @ centosvm64 bin]# ./ java -Xms3590m A Java HotSpot(TM)64位服务器VM警告:INFO:os :: commit_memory(0x00000007654a0000,2509635584,0)失败;错误='无法分配内存' (错误= 12)

Java Runtime Environment没有足够的内存来继续。  本机内存分配(malloc)无法为提交保留内存分配2509635584字节。  包含更多信息的错误报告文件保存为:  /root/Desktop/jdk1.7.0_51/bin/hs_err_pid51400.log
[root @ centosvm64 bin] #free -m
             缓存的总使用的免费共享缓冲区
纪要:981 896 84 0 17 432
- / + buffers / cache:446 534
交换:1983 157 1826

[root @ centosvm64 bin]# ./ java -Xms3000m A

所以我的问题是:
(1)我刚刚得到~1G的物理内存,为什么-Xms3000m可以工作并启动进程但-Xms3590没有?
(2)-Xms选项是否意味着进程必须保留至少该内存量然后启动或其他内容?显然,从之前的测试来看,它并非如此。我不知道它有什么问题。

1 个答案:

答案 0 :(得分:-1)

您可以使用的总内存是物理内存和交换内存的总和。

在这种情况下,物理内存和交换内存之和(减去已使用的内存)大于3000M且小于3590M。