在製作程序時,我如何確保特定的應用程序是64位應用程序或32位應用程序。我如何製作32位或64位應用程序?
是否有可能硬編碼的應用程序將分別爲64位或32位,如果可能的話,是否有必要使64位應用程序比平常的32位應用程序佔用更多的內存?
我知道32位應用程序/硬件的內存限制。
在製作程序時,我如何確保特定的應用程序是64位應用程序或32位應用程序。我如何製作32位或64位應用程序?
是否有可能硬編碼的應用程序將分別爲64位或32位,如果可能的話,是否有必要使64位應用程序比平常的32位應用程序佔用更多的內存?
我知道32位應用程序/硬件的內存限制。
無論是用於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上),或者它可能行爲不同。
如果我在32位JDK上編譯程序並在64位JVM上運行它,它會工作嗎? – Ankit 2012-08-07 10:25:01
@Ankit查看我已編輯的答案,回答您發佈的問題的答案 – 2012-08-07 10:30:19
在32位JDK上編譯的程序與在64位JDK上編譯的程序之間沒有區別,它將在32位版本上運行相同的程序,位JVM和64位JVM。即您可以在64位JDK上編譯並在32位JVM上運行。 – 2012-08-07 10:31:53
Java字節碼與平臺無關。除非你開始調用JNI或類似的東西,那麼你不應該擔心。
您可以告訴JVM是否以32位或64位模式運行。
沒有32位/ 64位Java程序這樣的事情。
這是JVM本身是在不同的體系結構上開發的,但Java規範是固定的,並且不會隨底層硬件而改變。
Java是平臺獨立的。因此,你不應該爲此而煩惱。 32和64之間的唯一區別在於使用的jdk。
如果您使用的是64位的JDK,您的應用程序是兼容64位
如果您使用的是32位JDK,您的應用程序是兼容32位軟件
如果我編譯在32位JDK上運行程序並在64位JVM上運行它 可以工作嗎?
是的,它會因爲你實際上沒有編譯它,你只是創建一個字節碼。
當JVM加載你的類時,它會在那個時候檢查jdk是64位還是32位,並使你的jvm分別爲64位或32位。
但不編譯將創建字節碼的程序。如果我錯了,請糾正。 – Ankit 2012-08-07 10:37:29
@Ankit字節碼不是機器碼。字節碼甚至不關心你有什麼jdk – 2012-08-07 11:30:29
創建java
應用程序後,建立並得到最終.jar
文件(如果該應用程序包括第三方罐,吃出jar
文件還)。
然後用
exe4j
應用程序,你可以輕鬆地x64
或x32
創建自己的
.exe
文件可以從this鏈接下載exe4j的。
你使用什麼編程語言? – 2012-08-07 09:48:47
我正在使用Java。 – Ankit 2012-08-07 09:54:15
只有硬編碼使用具有__asm {}彙編程序指令的c/C++頭文件庫。先生, – 2012-08-07 10:32:23