总结 :

电脑上安装的 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 安装替换即可 ;

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐