Java Web Start(JWS)内存管理似乎在32位和64位上有所不同

问题描述 投票:2回答:1

我们正在开发一个作为Java Web Start应用程序运行的(大)系统。因此,用户下载JNLP文件,并在他或她的计算机上运行它。

我们遇到一些用户声称应用程序在打开几个窗口时挂起的问题。我们做了一些测试,原因很清楚,可重复:

  • 如果用户使用32位JVM打开JNLP文件,则最大内存将达到256 MB,超过此阈值后,应用程序将占用0%可用内存并挂起。
  • 如果同一用户使用64位JVM打开相同的JNLP文件,则最大内存从256 MB开始,但由于系统需要更多内存,因此JVM可以自由地保留和使用它,如果需要,最多可以使用1 GB以上。

我们做了几次测试,情况总是一样的。

有没有办法使32位JVM的行为与64位完全一样?我知道我们可以设置最大堆大小,但最终用户可能有1GB,2GB或3GB的可用内存,我们希望他或她能够在需要时使用它们,这正是64位的情况。

我们使用的是Java 8,更新201。

应用程序的内存需求取决于您打开多少个窗口。对于正常使用,256MB-512MB就足够了,但是一些用户可以从打开7-10个屏幕中受益,而这可能会达到800MB-1GB的RAM。

java java-8 heap java-web-start jnlp
1个回答
3
投票

您应该使用the JNLP file参数在max-heap-size中指定应用程序所需的内存,而不依赖于客户端系统:

<java version="1.8" initial-heap-size="256m" max-heap-size="1024m"/>

在大多数情况下,默认的JVM堆是at most 25% of the available system memory。如果某些用户只有1GB的RAM,那么如果你自己没有指定它们,它们的堆将永远不会超过256 MB。

请注意,由于您支持32位JVM,因此不能超过2 GB。

© www.soinside.com 2019 - 2024. All rights reserved.