2011-03-03 155 views
5

我们正在开发一个由Java编写的swing应用程序,只需要大约128MB的内存,而在不久的将来,我不会看到它需要更多的内存,比如4GB。以前我们总是提供3个不同的版本,一个用于32位Windows,一个用于32位Linux,另一个用于64位Linux,安装包含JRE。 直到几个星期前,64位版本才被任何人使用,并且报告了OutOfMemoryException,因为该应用程序比32位版本消耗了大约40-50%的内存。64位操作系统上的32位或64位应用程序?

我的问题是,如果应用程序永远不需要使用超过4GB的内存,是否需要为64位Linux提供64位版本?我们进行了一些快速测试,发现32位版本也适用于64位Linux。但我不确定我们可能会有什么缺点,例如性能和/或兼容性问题?

+0

让我澄清一点:32位版本正在使用128MB作为最大内存,对于64位版本,它可能需要192MB,所以我们不仅需要创建额外的64位安装程序,还必须创建不同的配置,这使得整个事情变得更加复杂。如果我们为所有版本使用192MB,那么它可能会让内存泄漏对我们来说不是那么明显,因为32位版本现在是最常用的了。还有一件事是,许多应用程序可以在该服务器上运行,所以我们希望尽可能降低内存消耗。 – 2011-03-03 09:36:17

+0

如果您在64位JVM中使用32位引用,它不会需要更多的内存。 – 2011-03-03 09:58:48

回答

3

如果您的应用程序没有对64位主机操作系统进行任何改进,并且与您的32位版本兼容,那么我看不到立即需要提供它。

但是,即使不是全部新系统,大多数新系统都基于x64体系结构,我主张64位软件也应该是自然的默认设置。越接近硬件级别,这种需求越强。我无法告诉你为了支持某些32位VPN客户端而运行虚拟操作是多么的尴尬。

如果您决定将其作为首选选项,则提升64位客户端可能会影响您的下载统计信息。

2

大多数32位JVM被限制在1.2-1.5左右GB。

如果您发现应用程序在64位JVM中使用的内存更多,请尝试使用-XX:+UseCompressedOops,它告诉64位JVM使用32位引用,但仍可以访问32 GB内存。

1

我的问题是,如果应用程序永远不需要使用超过4GB的内存,是否需要为64位Linux提供64位版本?

如果应用程序不需要那么多内存,64位安装程序/ JVM不会添加任何值。相反,这是一个糟糕的选择,因为(如你所观察到的)它只是使用更多的内存,并且(可能)因此运行速度较慢。

(事实上,实际的限制将小于4GB,32位地址空间的某些部分将无法使用,因为硬件架构的问题。)

我建议你收回64位版本,但为用户提供使用他们分别下载和安装的JVM的能力。 (确实,你应该可以做后者,当人们升级到获得最新的JVM安全修复程序时,JRE的嵌入式拷贝往往会被忽略......)

相关问题