簡體   English   中英

Java:VM如何在32位處理器上處理64位`long`

[英]Java: How does the VM handle a 64bit `long` on a 32bit processor

JVM如何在32位處理器上處理原始的“長”(64位)?


在多核32位機器上,它可以並行使用多個內核嗎?
32位機器上64位操作的速度要慢多少?

它可能使用多個內核來運行不同的線程,但它不會並行使用它們進行64位計算。 64位長基本上存儲為兩個32位整數。 為了添加它們,需要兩次添加,跟蹤進位。 乘法有點像兩個兩位數的乘法,除了每個數字在基數2 ^ 32而不是基數10之外。所以對於其他算術運算。

編輯速度:我只能猜測速度差異。 添加需要兩個加法而不是一個,並且乘法(我認為)需要四個乘法而不是一個。 但是,我懷疑如果所有內容都可以保存在寄存器中,那么計算的實際時間將相當於讀取內存兩次所需的時間和寫入兩次所需的時間,所以我的猜測是大多數時間的兩倍。操作。 我想這將取決於處理器,特定的JVM實現,月亮的階段等。除非你做大量的數字運算,否則我不會擔心它。 大多數程序花費大部分時間等待IO進出磁盤或網絡。

來自TalkingTreeJava HotSpot FAQ

通常,與在32位VM上運行相同的應用程序相比,能夠處理更大量內存的好處與64位VM中的性能損失相比較小。 這是因為系統中的每個本機指針占用8個字節而不是4個。這個額外數據的加載會對內存使用產生影響,這會導致執行速度稍慢,具體取決於執行期間加載的指針數量。你的Java程序。
好消息是,在64位模式下運行AMD64和EM64T平台時,Java VM會獲得一些額外的寄存器,可用於生成更高效的本機指令序列。 這些額外的寄存器將性能提高到在比較32位到64位執行速度時通常沒有性能損失的程度。

當您遷移到64位VM時,將64位平台上運行的應用程序與SPARC上的32位平台相比,性能差異大約為10-20% 在AMD64和EM64T平台上,這種差異范圍為0-15%,具體取決於訪問應用程序的指針數量。

暫無
暫無

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

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