
【错误记录】启动 Java 程序报错 ( Could not reserve enough space for 2097152KB object heap )
一、报错信息二、报错分析1、参数分析2、报错信息分析3、最大堆内存的影响因素4、电脑配置分析5、操作系统限制 - 32 / 64 位操作系统单个程序可用内存6、Java 虚拟机限制三、解决方案
文章目录
总结 :
电脑上安装的 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
报错截图如下 :

二、报错分析
1、参数分析
执行
java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -jar map.jar
命令 , 设置的参数分析 :
- " -Xms512m " 参数 是 设置 Java 虚拟机 的 初始堆内存 大小为 512M ;
- " -Xmx2048m " 参数 是 设置 Java 虚拟机 的 最大堆内存 大小为 2048M , 该参数意味着 Java 虚拟机 会根据 应用程序 的需要 动态扩展 堆的大小 , 但不会超过 2048 MB ;
2、报错信息分析
执行后 , 报错
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
翻译 :
虚拟机初始化错误
无法为 2097152KB 的 对象堆 保留足够的空间
Java 虚拟机 在尝试为对象堆分配 2048M 的 内存空间时 出现错误 , 无法提供 2045M 的堆内存空间 ;
将 " -Xmx2048m " 参数 设置为 " -Xmx1024m " 参数 是可以成功运行的 , 设置最大堆内存为 2048m 就会报错 ;
3、最大堆内存的影响因素
java 命令的 -Xmx 参数 的设置范围 不是固定的 , 它取决于
- 电脑配置 , 如 : 物理内存大小 ;
- 操作系统限制 , 32 位 的操作系统 和 64 位 的操作系统 ;
- Java 虚拟机位数 ;
4、电脑配置分析
当前 16G 内存 , 已使用 60% , 内存占用很多 , 还剩下 6.4G 内存 , 看起来应该够用 , 并不是电脑配置问题 ;

5、操作系统限制 - 32 / 64 位操作系统单个程序可用内存
在 32 位操作系统中 , 内存地址是由 32 位二进制数表示的 , 理论上可以表示2^32 个不同的内存地址 , 可以支持的最大内存是4GB ;
实际上 , 操作系统 和 其他系统级程序需要使用一部分内存 , 单个程序 可使用的内存 通常会低于 4GB ;
在 64 位操作系统中 , 内存地址是由 64 位二进制数表示的 , 理论上支持 2^64 个字节的内存地址 , 大约 1600 万 TB ;
64 位操作系统 中 单个应用的内存基本不受限制 ;
6、Java 虚拟机限制
在 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 安装替换即可 ;
更多推荐



所有评论(0)