我们正在开发一个作为Java Web Start应用程序运行的(大)系统。因此,用户下载JNLP文件,并在他或她的计算机上运行它。
我们遇到一些用户声称应用程序在打开几个窗口时挂起的问题。我们做了一些测试,原因很清楚,可重复:
我们做了几次测试,情况总是一样的。
有没有办法使32位JVM的行为与64位完全一样?我知道我们可以设置最大堆大小,但最终用户可能有1GB,2GB或3GB的可用内存,我们希望他或她能够在需要时使用它们,这正是64位的情况。
我们使用的是Java 8,更新201。
应用程序的内存需求取决于您打开多少个窗口。对于正常使用,256MB-512MB就足够了,但是一些用户可以从打开7-10个屏幕中受益,而这可能会达到800MB-1GB的RAM。
您应该使用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。