簡體   English   中英

Java 32位與64位兼容性

[英]Java 32-bit vs 64-bit compatibility

Java代碼是否可以在32位JDK中構建和編譯成32位字節代碼,在64位JVM中工作? 或者64位JVM是否需要64位字節代碼?

為了提供更多細節,我的代碼在運行32位JVM的Solaris環境中工作,但現在我在將JDK和Weblogic Server升級到64位后遇到問題。

是的,Java字節碼(和源代碼)是獨立於平台的,假設您使用獨立於平台的庫。 32對64位應該無關緊要。

我不小心在64位VM而不是32位VM上運行我們的(大型)應用程序,直到一些外部庫(由JNI調用)開始失敗才發現。

在32位平台上序列化的數據在64位平台上讀取,完全沒有問題。

你得到了什么問題? 做一些事情而不是其他事情嗎? 您是否嘗試過附加JConsole等並且有一個高峰?

如果您有一個非常大的VM,您可能會發現64位的GC問題可能會影響您。

第一個問題是,第二個問題不是; 它是一個虛擬機。 您的問題可能與版本之間的庫實現中未指定的更改有關。 雖然可能是比賽條件。

VM必須經歷一些箍。 值得注意的是,引用在類文件中被處理,就像它們在堆棧上占用與int相同的空間。 doublelong占用兩個參考插槽。 例如字段,VM通常會經歷一些重新排列。 這一切都是(相對)透明地完成的。

一些64位JVM也使用“壓縮oops”。 因為數據大約每8或16個字節對齊,所以地址的3或4位是無用的(盡管某些算法可能會竊取“標記”位)。 這允許32位地址數據(因此使用一半的帶寬,因此更快)在64位平台上使用35或36位的堆大小。

所有字節代碼都是基於8位的。 (這就是它所謂的BYTE代碼的原因)所有指令都是8位大小的倍數。 我們在32位計算機上開發並使用64位JVM運行我們的服務器。

你能詳細介紹一下你所面臨的問題嗎? 然后我們可能有機會幫助你。 否則我們只會猜測你遇到的問題。

除非您有本機代碼(為特定的arcitechture編譯的機器代碼),否則您的代碼將在32位和64位JVM中同樣運行。

但請注意,由於較大的地址(32位為4字節,64位為8字節),64位JVM將需要比32位JVM更多的內存來執行相同的任務。

當您與本機庫連接時,32位與64位的差異變得更加重要。 64位Java將無法與32位非Java dll(通過JNI)連接

在創建exe時,在配置中添加如下的參數

http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

我希望它有所幫助。

謝謝...

/ JAV

Java JNI要求與JVM具有相同“bittiness”的OS庫。 如果您嘗試構建依賴於IESHIMS.DLL(位於%ProgramFiles%\\ Internet Explorer中)的內容,則需要在JVM為32位時使用32位版本,在JVM為64位時使用64位版本。 同樣適用於其他平台。

除此之外,你應該全力以赴。 生成的Java字節碼s / b相同。

請注意,對於較大的項目,您應該使用64位Java編譯器,因為它可以處理更多內存。

喲錯在哪里! 對於這個主題,我向oracle寫了一個問題。 答案是。

“如果你在32位機器上編譯你的代碼,你的代碼應該只在32位處理器上運行。如果你想在64位JVM上運行你的代碼,你必須使用64位64位機器上編譯你的類文件-Bit JDK。“

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM