Java千問:你知道Java語言布爾型數據到底佔多大空間嗎?

咱們都知道,Java語言中有個boolean類型。每一個boolean類型的變量中存儲的是一個true或者是false的邏輯值。那麼存儲這個邏輯值,須要多大的空間呢?從理論上來說,存儲這個邏輯值只須要1個位(bit)就能夠了,不少教科書上談到這個問題的時候,也說boolean類型的數據在內存中只佔1個位。html

可是稍微有點計算機常識的人都知道:計算機完成尋址操做的時候,是以字節爲最小單位進行的。也就是說每次要讀取內存中數據的時候,最小隻能精確到1個字節,不能單獨讀取某個位上的信息。若是boolean類型的變量的值只佔1個位,計算機每次讀取到1個字節的信息,裏面會包含8個boolean變量的值。計算機就不得不經過某種算法去肯定這8個值中,哪個纔是咱們要找的值。這樣作顯然很是不合理,由於要完成這個「8選1」的操做又會增長運算工做量。那麼Java虛擬機究竟是怎樣存儲boolean值呢?算法

爲了完全說清楚這個問題,咱們還要刨一刨老底。每次JDK出新版本的時候,Java官方都會發佈一個對應版本的《虛擬機規範》。在《虛擬機規範》中,對boolean類型的存儲有專門的解釋,文中說到:「雖然定義了boolean這種數據類型,可是隻對它提供了很是有限的支持。在Java虛擬機中沒有任何供boolean值專用的字節碼指令,Java語言表達式所操做的boolean值,在編譯以後都使用Java虛擬機中的int數據類型來代替,而boolean數組將會被編碼成Java虛擬機的byte數組,(所以)每一個boolean元素佔8位」。編程

按照這樣的說法咱們能夠得知:boolean類型的數據若是單獨使用,佔4個字節的空間,而若是存儲到boolean數組中,每一個元素又只佔1個字節。
緊接着問題又來了:單獨使用boolean類型數據的時候,爲何要用4個字節來存儲呢?用1個或2個字節存儲豈不是更節省空間嗎?咱們必須知道,當下大部分處理器都是32位的(不是操做系統的32位,而是指CPU硬件),把boolean型數據存儲成4個字節(32位),存取效率是最高的。數組

最後還會有小夥伴問:《虛擬機規範》中是這麼規定的,但在實現虛擬機的時候,真是按這樣的規定來執行嗎?爲了說清楚這個問題,咱們又要科普一個小常識:世界上並不是只有Oracle一家公司實現了Java虛擬機(JVM),也有其餘廠商或機構會發布本身的Java虛擬機實現。這些廠商或機構在本身的虛擬機中,是否徹底按照《規範》的規定來存儲boolean型數據就不得而知了。他們會綜合考慮運算效率與存儲空間兩方面的性能。ide

如想系統學習Java編程,能夠點擊https://edu.51cto.com/lecturer/2256836.html觀看我在本站的視頻課程,有問題也能夠加入個人QQ羣291839907一塊兒討論!性能

相關文章
相關標籤/搜索