2015-08-21 24 views
0

我有一个Java Webstart应用程序,它以-Xmx1G成功启动,但未能以-Xmx2G开头。我的一些用户确实需要2G的堆。Webstart应用程序无法以Java 8u60上的-Xmx2G开头

这似乎只是Java 8u60的问题,因为我有一个成功启动Java 8u51的人的报告。

失败看起来像这样:我看到蓝色的'Java ...'启动画面,然后在几秒钟后,它不再显示Java控制台,也没有产生任何预期的跟踪信息地点。

仅在内存少于2G的客户端上发生故障。但是,对于请求“最大”堆大小可能会导致应用程序很早失败并且没有任何诊断信息,我有点惊讶。毕竟,我们正在处理“最大”价值,而不是“初始”价值。我在多处阅读JVM不应该这样做。

但我还记得读到'初始',如果未指定,是基于最大值。所以,随着通过-Xmx2G,我尝试通过-Xms512M,-Xms256M-Xms128M。但是,这种缩小初始堆大小的尝试无济于事。我无法从-Xmx2G开始获得这个东西!

有没有人有任何光在这种情况下摆脱?一个办法?解决方法?在短期内,我将更改为-Xmx1G,但正如我刚开始所说的,我有一些真正需要-Xmx2G的用户。我想避免有两个单独的*.jnlp文件,这也需要有两个单独的*.jar文件!

回答

0

原来,这正是Java8u60上的Webstart所做的,如果客户机没有足够的内存来满足-Xmx。它试图开始,然后它会消失,但没有任何迹象表明哪里出了问题。因此,如果我想让具有更多内存的用户将该内存分配给我的应用程序,那么最终我将不得不以不同配置构建我的应用程序。这是因为签名需要将* .jnlp文件放入* .jar文件本身,并且此* .jnlp文件必须与用于启动应用程序的* .jnlp文件完全匹配。

+0

如果JNLP无法启动,它不太可能正常启动效果更好。 顺便说一句:你检查是否使用64位jvm? – eckes

+0

有趣的是,你应该说---我似乎每2-3个月都会遇到一个新的webstart问题,即使我的应用总是从本地启动。不,我没有检查客户机/ JRE是32位还是64位。但是,我可以通过修改“-Xmx”的参数来启动或不启动应用程序,并且故障点与可用内存相对应,所以我相当确信这是原因。 –