2010-07-19 64 views
4

我们用java在webstart在客户端的的Java Swing基于aplication。最近我们在点击jnlp链接时遇到了一个奇怪的“无法启动java虚拟机”错误。的Java Webstart的最大堆大小导致JVM无法启动

我们很快就找到了它,因为在JNLP文件最大堆大小设置被设置为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 注最大堆大小设置为1024米可与2G内存的机器上导致同样的问题。

基本上,我期待在这里是为什么这种情况正在发生一些参考/规格/经验,如果有任何GET-一轮针对此问题除了增加物理内存的大小。

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

感谢, JasonW

回答

3

很可能这个问题是由一个足够大的内存区域不能被分配到你的JVM的事实引起的。出于实现的原因,Java对象堆必须分配在连续的虚拟地址中。

我注意到,与2 GB RAM一个Win XP的盒子这打破在大约1.5 GB(此关当然这取决于每个工序都是PC上运行的不同而不同,所以因人而异)。

结帐了一些解释以下职位:

Java maximum memory on Windows XP

Why is the maximum size of the Java heap fixed?

+0

非常有用的链接。谢谢。它还是监督我,没有什么(至少我无法找到任何东西)有关的JNLP最大堆大小的参数要求。 – 2010-08-24 00:31:44

1

我发现,无论是初始堆大小和最大堆大小并未受到Mac版本尊重的javaws。我结束了的东西代替它们是这样的:

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

终于拿到了它在Mac上工作具有较大的堆大小

+1

对于使用Java 8的Windows不起作用 – jan 2015-04-22 08:17:08