2012-08-07 98 views
0

在製作程序時,我如何確保特定的應用程序是64位應用程序或32位應用程序。我如何製作32位或64位應用程序?

是否有可能硬編碼的應用程序將分別爲64位或32位,如果可能的話,是否有必要使64位應用程序比平常的32位應用程序佔用更多的內存?

我知道32位應用程序/硬件的內存限制。

+0

你使用什麼編程語言? – 2012-08-07 09:48:47

+0

我正在使用Java。 – Ankit 2012-08-07 09:54:15

+0

只有硬編碼使用具有__asm {}彙編程序指令的c/C++頭文件庫。先生, – 2012-08-07 10:32:23

回答

2

無論是用於32位還是64位,都有一個字節代碼。

這意味着您可以在64位JVM上使用任何64位JVM之前在32位機器上編譯的庫。

64位JVM可以使用更多的內存,但不像您認爲的那樣多,因爲現代64位JVM使用Compressed Oops,因此您可以使用32位引用來處理高達32 GB的堆。 (您也可以使用更多的堆內存)

32位操作系統上的許多32位JVM都限制爲1.2至1.5 GB的內存。在64位操作系統上,根據操作系統的不同,此限制可能爲2.5至3.5 GB。 64位操作系統上的64位JVM實際上限於大約1TB的內存,但此限制可能會在未來取消(並取決於操作系統)

唯一的區別是,如果您使用JNI。一個JNI共享庫依賴於32位或64位庫,並且您可能只有一個(在這種情況下,您只能將它加載到具有相同位的JVM上),或者它可能行爲不同。

+0

如果我在32位JDK上編譯程序並在64位JVM上運行它,它會工作嗎? – Ankit 2012-08-07 10:25:01

+0

@Ankit查看我已編輯的答案,回答您發佈的問題的答案 – 2012-08-07 10:30:19

+1

在32位JDK上編譯的程序與在64位JDK上編譯的程序之間沒有區別,它將在32位版本上運行相同的程序,位JVM和64位JVM。即您可以在64位JDK上編譯並在32位JVM上運行。 – 2012-08-07 10:31:53

1

Java字節碼與平臺無關。除非你開始調用JNI或類似的東西,那麼你不應該擔心。

您可以告訴JVM是否以32位或64位模式運行。

0

沒有32位/ 64位Java程序這樣的事情。

這是JVM本身是在不同的體系結構上開發的,但Java規範是固定的,並且不會隨底層硬件而改變。

4

Java是平臺獨立的。因此,你不應該爲此而煩惱。 32和64之間的唯一區別在於使用的jdk。

如果您使用的是64位的JDK,您的應用程序是兼容64位

如果您使用的是32位JDK,您的應用程序是兼容32位軟件

如果我編譯在32位JDK上運行程序並在64位JVM上運行它 可以工作嗎?

是的,它會因爲你實際上沒有編譯它,你只是創建一個字節碼。

當JVM加載你的類時,它會在那個時候檢查jdk是64位還是32位,並使你的jvm分別爲64位或32位。

+0

但不編譯將創建字節碼的程序。如果我錯了,請糾正。 – Ankit 2012-08-07 10:37:29

+0

@Ankit字節碼不是機器碼。字節碼甚至不關心你有什麼jdk – 2012-08-07 11:30:29

0

創建java應用程序後,建立並得到最終.jar文件(如果該應用程序包括第三方罐,吃出jar文件還)。

  • 然後用exe4j應用程序,你可以輕鬆地x64x32

  • 創建自己的 .exe文件可以從this鏈接下載exe4j的。

相關問題