我试图测试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选项是否意味着进程必须至少保留该数量的内存,然后启动或其他操作?显然,从之前的测试来看,情况并非如此。我不知道它怎么了。
您可以使用的总内存是物理内存和交换内存的总和。
在这种情况下,物理内存和交换内存的总和(减去已使用的内存)大于3000M,小于3590M。