2011-03-03 153 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的嵌入式拷貝往往會被忽略......)

相關問題