总结 :
电脑上安装的 32 位的虚拟机 , 只能设置 1024MB 最大堆内存 , 建议安装 64 位的 JDK ;
查看电脑上虚拟机位数的方法 , 执行下面的命令 , 查看电脑的虚拟机位数 ;
java -d64 -version
java -d32 -version
执行 哪个 命令 , 成功打印出 Java 版本号 , 那么就是对应的位数 ;
下面就是执行失败的结果 :
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
下面是执行成功的结果 :
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)
执行
java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -jar map.jar
命令后 , 报如下错误 :
D:\demo>java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -jar map.jar
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
报错截图如下 :
执行
java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -jar map.jar
命令 , 设置的参数分析 :
执行后 , 报错
Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap
翻译 :
虚拟机初始化错误 无法为 2097152KB 的 对象堆 保留足够的空间
Java 虚拟机 在尝试为对象堆分配 2048M 的 内存空间时 出现错误 , 无法提供 2045M 的堆内存空间 ;
将 " -Xmx2048m " 参数 设置为 " -Xmx1024m " 参数 是可以成功运行的 , 设置最大堆内存为 2048m 就会报错 ;
java 命令的 -Xmx 参数 的设置范围 不是固定的 , 它取决于
当前 16G 内存 , 已使用 60% , 内存占用很多 , 还剩下 6.4G 内存 , 看起来应该够用 , 并不是电脑配置问题 ;
在 32 位操作系统中 , 内存地址是由 32 位二进制数表示的 , 理论上可以表示2^32 个不同的内存地址 , 可以支持的最大内存是4GB ;
实际上 , 操作系统 和 其他系统级程序需要使用一部分内存 , 单个程序 可使用的内存 通常会低于 4GB ;
在 64 位操作系统中 , 内存地址是由 64 位二进制数表示的 , 理论上支持 2^64 个字节的内存地址 , 大约 1600 万 TB ;
64 位操作系统 中 单个应用的内存基本不受限制 ;
在 32 位 的 Java 虚拟机 上 , 由于内存寻址的限制 , 理论上最大约 1.5GB 至2GB , 实际可用的内存可能更少 ;
在 64 位 的 Java 虚拟机 上 , 基本不受虚拟机的制约 ;
执行如下代码 , 打印出来的就是当前 JVM 的位数 ;
public class Test {
public static void main(String[] args) {
String model = System.getProperty("sun.arch.data.model");
System.out.println(model);
}
}
也可以在命令行中分别执行 :
java -d64 -version
java -d32 -version
查看 执行结果 :
java -d64 -version
命令 , 得到的结果如下 :C:\Users\octop>java -d64 -version
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
java -d32 -version
命令 , 得到的结果如下 :C:\Users\octop>java -d32 -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)
结论就是 , 我的电脑上装的是 32 位的 Java 虚拟机 , 最大支持 1400M 的最大内存 , 设置 1410M 就会报错 ;
解决方案就是下载 64 位的 JDK 安装替换即可 ;