32位和64位的java程序可以通用嗎


  java程序32位和64位可以通用嗎?我一直有這個疑問,比如64位的機器上運行32位的java程序會不會有問題,直到我看到了JVM大神R大 RednaxelaFX的回答。

       下面是拷貝

 

       用32位還是64位的JDK編譯出來的Class文件沒區別,關鍵是運行程序的JDK/JRE是多少位的,此時64位的JDK/JRE占的包括PermGen在內的內存會多一些。

        主要是指針的寬度變寬了,32位的指針是32位的,64位的指針是64位的,大了一倍。假設有下面的一個C語言聲明的數據結構:

struct X {
 int i;
 void* ptr;
}

  在32位條件下它或許要8字節,而在64位條件下它或許就是12字節。

 

        HotSpot VM通常使用直接指針來實現java層面的對象引用。所以在64位JVM上運行程序,java對象因此而變大,JVM內部的數據結構也有些會變大。在64位JVM使用指針壓縮時,java對象的java引用可以維持跟32位JVM一樣大(每個壓縮指針占32位),但有些JVM內部數據結構用不上壓縮指針功能,只存直接指針,所以還是要變大。

 

  如果某個java app有native部分,那么native的部分也得對應上。Tomcat也可以tcnative(Tomcat Native Libary), 是用C寫的,所以有“32位Tomcat”這么一說。

  Spring的話我印象中沒native部分。

 

        最后自己的理解,如果程序中有native,so或者dll,那么就是不通用的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM