大小会导致JVM无法启动

我们在客户端使用java webstart来执行基于java swing的应用程序。 最近我们在点击jnlp链接时遇到了一个奇怪的“无法启动java虚拟机”错误。

我们很快就会发现它的原因,因为jnlp文件中的max-heap-size设置被设置为1024m,而大多数客户端PC只有1 gb物理内存。 将max-heap-size设置回512m解决了问题。 目前,jnlp文件中的相关行看起来像

 <j2se version="1.5+" initial-heap-size="100m" max-heap-size="512m"/>

我研究了jnlp规范,但找不到与“Java虚拟机”问题相关的任何内容。 理论上,最大堆大小不应该像初始堆大小一样重要。 但我们的经验暗示恰恰相反。

客户端环境:

Windows XP SP2(32位),Internet Explorer 8.06,内存1G注意max-heap-size设置为1024m可能会在装有2G RAM的计算机上导致相同的问题。

基本上,我在这里寻找的是关于为什么发生这种情况的一些参考/规格/经验,以及是否有任何解决此问题的办法,除了增加物理内存大小。

另一件事是,如果我们保留未指定的最大堆大小,实际的物理内存大小是否将用作最大堆大小,或者将使用系统默认的大小?

谢谢,JasonW


这个问题很可能是由于无法为您的JVM分配足够大的内存空间。 出于实现的原因,Java对象堆必须分配在连续的虚拟地址中。

我注意到,在一个带有2Gb RAM的Win XP盒子上,这个盒子的破解大约为1.5GB(这个关闭过程根据每台PC上运行的过程而变化,因此YMMV)。

查看以下帖子以获得一些解释:

Java在Windows XP上的最大内存

为什么Java堆的最大大小是固定的?


我发现Mac版的javaws并没有很好地满足初始堆大小和最大堆大小。 我最终用这样的东西取代它们:

      <j2se version="1.6+" java-vm-args="-Xmx1024m -Xms256m -Xss8m" />

最后在更大的堆大小的Mac上工作

链接地址: http://www.djcxy.com/p/82891.html

上一篇: size causes JVM cannot be started

下一篇: Maximum Java heap size of a 32