3 回答

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超4個(gè)贊
主要和java虛擬機(jī)有關(guān)。
現(xiàn)在使用的大多都是32位虛擬機(jī),一次最多只能處理32位數(shù)據(jù)。
使用64位虛擬機(jī)即可直接讀寫(xiě)64位數(shù)據(jù),但是64位虛擬機(jī)存在性能優(yōu)勢(shì)小和內(nèi)存空間浪費(fèi)等問(wèn)題,目前尚未被廣泛應(yīng)用。

TA貢獻(xiàn)88條經(jīng)驗(yàn) 獲得超19個(gè)贊
了解過(guò)class文件結(jié)構(gòu)嗎?class文件中保存了譬如常量池、字段表、方發(fā)表、屬性表等等,其字節(jié)碼offset從0x00000000到0xFFFFFFFF一共2^32個(gè),方法表里面有個(gè)code屬性,其中有個(gè)叫max_locals的值代表局部變量表需要的存儲(chǔ)空間,它的單位是slot,虛擬機(jī)規(guī)定了的為局部變量表分配的最小存儲(chǔ)單位,不超過(guò)32位的如Int、byte等用一個(gè)slot,但long和double這種需要兩個(gè)slot,你要讀寫(xiě)一個(gè)大于32位的變量,就需要讀寫(xiě)兩次,被volatile修飾之后,它把這個(gè)非原子操作的兩次讀寫(xiě)封裝成一個(gè)原子操作,就好像跟int型一樣其讀寫(xiě)具有原子性,至于怎么封裝的,那你得看一下源碼,原理是這樣,但現(xiàn)在商用虛擬機(jī)里面,你就認(rèn)為long這些跟int這些一樣,都具有原子性操作就行了,沒(méi)必要深究。
添加回答
舉報(bào)