64位操作系统上的32位或64位应用程序?

时间:2011-03-03 09:05:32

标签: java 64-bit 32-bit cons

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

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

4 个答案:

答案 0 :(得分:3)

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

然而,大多数(如果不是全部)新系统都基于x64架构,我提倡64位软件也应该是自然默认的。您越接近硬件级别,这种需求就会越来越强烈。我不能告诉你运行虚拟操作只是为了支持某些32位VPN客户端是多么的糟糕。

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

答案 1 :(得分:2)

检查此64 bit java

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

  

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

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

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

我建议您撤销64位版本,但为用户提供使用已下载并单独安装的JVM的功能。 (实际上,无论如何你应该做后者。当人们升级以获得最新的JVM安全修复程序时,JRE的嵌入式副本往往会被忽略......)


UPDATE(2019) - Java 8是Oracle为32位平台提供的Java的最后一个版本。从Java 11(当前的LTS版本)开始,Linux,MacOS,SunOS / SPARC和Windows的Oracle标记的发行版仅为64位。

我现在的建议是尽快将您的产品从32位迁移出去。您不希望在EOL'd版本的Java上试图支持产品。

当然,根据this Q&A,Azul可以提供32位Java 11。 (我注意到Linux的Java 11的32位“Zulu”版本,但不适用于Windows或MacOS.YMMV。)