今天在启动服务的时候,发现服务启动失败,看了下启动日志,发现报jvm堆内存不足。仔细看了下启动参数,Xmx设置的是4096
Could not create the Java virtual machine.
Invalid maximum heap size: -Xmx4096m
The specified size exceeds the maximum representable size.
第一反应就是系统内存不足。打开任务管理器查看,发现8G的内存只用了不到3G,不应该会出现问题。
打开cmd,输入java -version 发现jdk是32位的jdk。理论上说上 32 位的 JVM 堆内存可以到达 2^32,即 4GB,4096应该刚好是上限。
命令行中使用 java -Xmx512m -version 开始测试最大可设置的堆内存。发现当接近-Xmx1600m时出现同样报错。
后续查询相关资料,发现,虽然32位JDK理论上堆内存可以到达4096,但是,由于系统问题,会对内存进行限制。
不同操作系统之间不同,如 Windows 系统大约 1.5 GB,Solaris 大约 3GB。
更换64 位 JDK后,启动正常