[英]Primitive data types and portability in Java
我引用Herbert Schildt的第3章數據類型,變量和數組:
基元類型表示單個值而不是復雜對象。 雖然Java完全是面向對象的,但原始類型卻不是。 這種效率的原因。 制作原始類型會使性能降低太多。
原始類型被定義為具有明確的范圍和數學行為。 諸如C,C ++之類的語言允許整數的大小根據執行環境的指示而變化。 但是,Java是不同的。 由於Java的可移植性要求,所有數據類型都具有強烈定義的范圍。 例如,無論特定平台如何,int總是32位。 這允許編寫保證在不移植任何機器架構的情況下運行的程序。 雖然嚴格指定整數的大小可能會導致某些環境中的性能損失很小,但為了實現可移植性,這是必要的。
他最后兩行是什么意思? 如何指定整數的大小可能會導致某些環境中的性能損失很小?
在“較低”語言中,原始數據類型大小通常來自CPU處理它們的能力。 例如,在c中 , int
被定義為“大小至少為16位”,但其大小可能因架構而異,以確保“int類型應該是目標處理器最有效的整數類型”。 “。 ( 來源 )。 這意味着如果你的代碼對int
的大小做了粗心的假設,那么如果你將它從32位x86移植到64位powerpc ,它可能會破壞。
如上所述, java是不同的。 例如, int
將始終為32位。 這意味着當您在不同的體系結構上運行相同的代碼時,您不必擔心其大小更改。 如上所述,權衡是性能 - 在任何本身不處理32位計算的架構上,這些int
需要擴展到CPU可以處理的本機大小(這會有一個小的懲罰),或者更糟如果CPU只能處理小int
S,上的每一個操作int
可能需要幾個CPU操作。
一些(很少) 計算機使用36位架構 ,因此您需要額外的步驟來屏蔽位,模擬溢出等。
Java在底層系統的指針機制的頂部實現了自己的數據指針機制。 如果數據不夠大,許多系統可能會使用較小的指針。
例如:如果整數數據只需要16位指針,系統將只分配使用16位指針所需的存儲空間。 但是,如果您使用的是Java,它會將16位轉換為32位指針分配,這需要大的內存空間,這也會降低存儲和數據搜索方面的性能。 因為你的指針很大 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.