第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JVM指令-sload

JVM指令-sload

慕運(yùn)維8079593 2023-06-21 13:35:36
我想這是一個基本問題,但為什么沒有sload指令?為什么可以加載除 short 之外的所有圖元?(有saload,但仍然......)為了 :public class ShortTest {    public void test() {        short i = 1;        System.out.print(i);    }}編譯器仍然使用iload_1。是因為 Short 是 16 位類型,而處理器可以更好地處理 32 位(因為所有現(xiàn)代處理器都是 32/64 位)?
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊

請參閱 JVM 規(guī)范,§2.11.1。類型和 Java 虛擬機(jī):

請注意,表 2.11.1-A中的大多數(shù)指令沒有整數(shù)類型byte、char和 的形式short。沒有一個具有該boolean類型的形式。編譯器對大量類型的文字值進(jìn)行編碼byte,并使用 Java 虛擬機(jī)指令在編譯時或運(yùn)行時short將這些值符號擴(kuò)展為類型值。int加載類型的文字值boolean并使用在編譯時或運(yùn)行時char將文字零擴(kuò)展為類型值的指令進(jìn)行編碼。int同樣,從boolean、 、byte、short和類型的值數(shù)組加載char,使用 Java 虛擬機(jī)指令進(jìn)行編碼,這些指令將值符號擴(kuò)展或零擴(kuò)展為類型值int.?因此,大多數(shù)對實(shí)際類型boolean、bytechar和的值的操作short都由對計算類型 的值進(jìn)行操作的指令正確執(zhí)行int

值得回顧的是,在 Java 中,任何不涉及的整數(shù)算術(shù)long都會有int結(jié)果,無論輸入是byte、charshort、 或int

所以一行像

short?i?=?1,?j?=?2,?k?=?i?+?j;

不會編譯,但需要類型轉(zhuǎn)換,比如

short?i?=?1,?j?=?2,?k?=?(short)(i?+?j);

這種類型轉(zhuǎn)換將是唯一short涉及的指示器。撇開調(diào)試提示不談,字節(jié)碼中沒有局部變量的正式聲明,只有確定其類型的值賦值。所以類型的局部變量short根本不存在。上面的代碼編譯為

? ? ?0: iconst_1

? ? ?1: istore_1

? ? ?2: iconst_2

? ? ?3: istore_2

? ? ?4: iload_1

? ? ?5: iload_2

? ? ?6: iadd

? ? ?7: i2s

? ? ?8: istore_3

這與編譯形式相同


int i = 1, j = 2, k = (short)(i + j);

但請注意,變量的編譯時類型可以更改編譯器在重載時選擇調(diào)用的方法。print(boolean)如果類型具有不同的語義(例如or的情況),這一點(diǎn)尤其重要print(char)。雖然傳遞給該方法的值int在這兩種情況下都有類型,但結(jié)果卻完全不同。


編譯器強(qiáng)制執(zhí)行的差異的另一個示例是


{

? ? int i = 1;

? ? i++;

}

{

? ? short s = 1;

? ? s++;

}

其被編譯為


? ? ?0: iconst_1

? ? ?1: istore_1

? ? ?2: iinc? ? ? ? ? 1, 1

? ? ?5: iconst_1

? ? ?6: istore_1

? ? ?7: iload_1

? ? ?8: iconst_1

? ? ?9: iadd

? ? 10: i2s

? ? 11: istore_1

因此,由于計算始終以 32 位執(zhí)行,因此編譯器插入必要的代碼以將結(jié)果截斷為short第二次遞增。再次注意沒有變量聲明,因此代碼與編譯后的形式相同


int i = 1;

i++;

i = 1;

i = (short)(i+1);

驗證類型系統(tǒng)也值得一看,因為驗證者將檢查所有從局部變量到局部變量的傳輸?shù)挠行裕?/p>

類型檢查器基于驗證類型的層次結(jié)構(gòu)強(qiáng)制執(zhí)行類型系統(tǒng),如下所示。

Verification?type?hierarchy:

?????????????????????????????top
???????????????????????____________/\____________
????????????????/??????????????????????????\
???????????????/????????????????????????????\
????????????oneWord???????????????????????twoWord
???????????/???|???\?????????????????????/???????\
??????????/????|????\???????????????????/?????????\?
????????int??float??reference?????????????????long????????double
?????????????????????/?????\
????????????????????/???????\_____________
???????????????????/??????????????????????\
??????????????????/????????????????????????\
???????????uninitialized????????????????????+------------------+
????????????/?????????\?????????????????????|??Java?reference??|
???????????/???????????\????????????????????|??type?hierarchy??|
uninitializedThis??uninitialized(Offset)????+------------------+??
?????????????????????????????????????????????????????|
?????????????????????????????????????????????????????|????????????????????????????????????????????????????null

因此,與 Java 語言類型相比,類型系統(tǒng)得到了簡化,并且驗證器不會介意,例如,如果您將值傳遞boolean給需要 a 的方法char,因為兩者都是int類型。


查看完整回答
反對 回復(fù) 2023-06-21
?
哆啦的時光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊

因為所有局部變量都至少占用一個32位槽。字節(jié)也是如此。



查看完整回答
反對 回復(fù) 2023-06-21
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號