提问者:小点点

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


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

javac -Xms3000m A

它成功了,我使用“free -m”来获取空闲内存。

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

内存不足,Java运行时环境无法继续。本机内存分配(malloc)无法分配2509635584字节用于提交保留的内存。包含更多信息的错误报告文件另存为:/root/Desktop/JDK 1 . 7 . 0 _ 51/bin/hs _ err _ PID 51400 . log < br >[root @ centosvm 64 bin]# free-m < br >缓存的已用空闲共享缓冲区总数< br > Mem:981 896 84 0 17 432 < br >-/buffers/cache:446 534 < br > Swap:1983 157 1826 < br >

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

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


共1个答案

匿名用户

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

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