JVM中初始和最大堆大小无效 - 如何修复

今天遇到一个这样的问题

在启动JVM时提示“ 无效的初始堆大小:-Xms = 1024M ”,甚至在将最大堆大小从1024 m更改为512M之后,它仍然崩溃,提示的错误是“无效的初始堆大小:-Xms = 512M,无法创建的Java虚拟机“。

我检查了几乎所有的东西,从检查我的机器有多少物理内存到JVM参数中的任何类型的错误,结果发现我把MB放进去了,而不是M.

。爪哇同时接受小的案和用于基洛,米加和演出的大写案例你可以使用米或M,G或G ^等,但不能使用MB,GB或KB。

使用-Xmx指定的最大堆大小也可能出现类似的问题。同样从Java 6更新18开始,JVM中的默认堆大小也发生了变化。

JVM中初始和最大堆大小无效 - 如何修复 JVM中的初始和最大堆大小无效

以下是在Java的的中指定最大和最小堆大小时常见的错误列表:

java - xmx4056 - xms4056 - HelloWorld

问题:VM初始化过程中发生错误,对象堆+ VM数据的大小超过了可表示的最大大小

原因:-Xms或-Xmx的值大于或接近物理内存的大小,因为我的机器有4GB内存。

java -Xmx1056M -Xms2056M HelloWorld

问题:VM初始化期间发生错误,指定的最小和最大堆大小不兼容

原因:-Xms的值大于-Xmx

java -Xms2056M HelloWorld

问题:VM初始化过程中发生错误,无法为对象堆预留足够的空间

原因:只提供-Xms,不提供-Xmx如果你犯了一个错误,而不是-Xmx你指定了两次-Xms,你也会得到这个错误,上次发生在我的朋友身上。

命令:java -Xms1024 M -Xmx1024M HelloWorld

问题:VM初始化时发生错误,初始堆太小

原因:如果您的空间在1024和中号之间,那么JVM会假设-Xms的大小仅为1024字节,并且打印错误认为它太小,JVM无法启动。

无效的堆大小

重新启动JVM时出现“无效堆大小”问题的另一个场景是,将64位JVM配置为接受内存超过4GB,但运行在32位数据模型上的内存。这种“无效堆大小”特别出现在的的Solaris机器中,J2SE安装持续32位和64位J2SE实现。在窗口和Linux等其他环境中,32位和64位JVM分别安装。如果不指定-d32或-d64,安装在的的Solaris机器上的64位JVM将运行32位模型,这将不接受4GB的最大堆大小,因此“无效堆大小”。

您可以通过使用选项-d64运行Solaris JVM来解决这个问题。命令行选项允许JVM在可用的情况下使用64位数据模型。

公共类HelloWorld {

public static void main(String args []){

System.out.println(“HelloWorld to Java”);

}

}

$ test @ nykdev32:~java -version

java版“1.6.0_14”

Java(TM)SE运行时环境(版本1.6.0_14-b08)

Java HotSpot(TM)服务器VM(内置14.0-b16,混合模式)

$ test @ nykdev32:~java -Xmx4096M HelloWorld

最大堆大小无效:-Xmx4096M

指定的大小超出了最大可表示大小。

无法创建Java虚拟机。

$ test @ nykdev32:~java -d64 -Xmx4096M HelloWorld

HelloWorld到Java

如果你从命令行运行的Java程序,你得到无法创建的Java虚拟机的错误消息,以及无效堆的错误,但如果你从Eclipse的中运行程序,你就不会得到“无法创建的Java虚拟机“的消息,你只会看到控制台的错误信息。

关于Java中的默认堆大小,从Java 6更新18开始,JVM在32位和64位机器以及客户机和服务器JVM模式下计算默认堆大小的方式发生了重大变化:

1)初始堆空间和最大堆空间越大,性能越好。

2)默认最大堆空间大小为192字节的物理内存的1 /,所以对于1G机器,堆的最大大小是256MB。在程序创建足够的对象来填充初始堆空间之前,不会使用最大堆大小,初始堆空间要小得多,但至少为8MB,即物理内存的1/64,最大1G。

3)对于服务器的Java的虚拟机,32位JVM上4GB物理内存的默认最大堆空间为1G。对于64位JVM,物理内存为128GB,则为32G。

转载于:https://juejin.im/post/5c7e138a6fb9a049d975f23f

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值