Java Web Start (JWS) 内存管理在 32 位和 64 位中似乎有所不同
Java Web Start (JWS) memory management seems to be different in 32 and 64 bits
我们正在开发一个作为 Java Web Start 应用程序运行的(大)系统。因此,用户下载 JNLP 文件,并在他或她的计算机上运行它。
我们遇到了一些用户声称应用程序在打开几个 windows 时挂起的问题。我们已经做了一些测试,原因很明确且可重复:
- 如果用户使用 32 位 JVM 打开 JNLP 文件,最大内存为 256 MB,一旦超过此阈值,应用程序将变为 0% 可用内存并挂起。
- 如果同一用户使用64位JVM打开同一个JNLP文件,最大内存为256MB起,但随着系统需要更多内存,JVM自由预留和使用,最高可达1GB以上如果需要的话。
我们做了几次测试,情况总是一样。
有什么方法可以使 32 位 JVM 的行为与 64 位完全相同?我知道我们可以设置最大堆大小,但最终用户可能有 1GB、2GB 或 3GB 的可用内存,我们希望他或她能够在需要时使用它们,这正是 64 位的情况.
我们正在使用Java8,更新201。
应用程序的内存需求取决于您打开了多少 windows。对于正常使用,256MB-512MB 绰绰有余,但一些用户会受益于能够打开 7-10 个屏幕,并且可能会达到 800MB-1GB 的 RAM。
您应该使用 max-heap-size
参数在 the JNLP file 中指定应用程序所需的内存,并且不依赖于客户端系统:
<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。
我们正在开发一个作为 Java Web Start 应用程序运行的(大)系统。因此,用户下载 JNLP 文件,并在他或她的计算机上运行它。
我们遇到了一些用户声称应用程序在打开几个 windows 时挂起的问题。我们已经做了一些测试,原因很明确且可重复:
- 如果用户使用 32 位 JVM 打开 JNLP 文件,最大内存为 256 MB,一旦超过此阈值,应用程序将变为 0% 可用内存并挂起。
- 如果同一用户使用64位JVM打开同一个JNLP文件,最大内存为256MB起,但随着系统需要更多内存,JVM自由预留和使用,最高可达1GB以上如果需要的话。
我们做了几次测试,情况总是一样。
有什么方法可以使 32 位 JVM 的行为与 64 位完全相同?我知道我们可以设置最大堆大小,但最终用户可能有 1GB、2GB 或 3GB 的可用内存,我们希望他或她能够在需要时使用它们,这正是 64 位的情况.
我们正在使用Java8,更新201。
应用程序的内存需求取决于您打开了多少 windows。对于正常使用,256MB-512MB 绰绰有余,但一些用户会受益于能够打开 7-10 个屏幕,并且可能会达到 800MB-1GB 的 RAM。
您应该使用 max-heap-size
参数在 the JNLP file 中指定应用程序所需的内存,并且不依赖于客户端系统:
<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。