Java虚拟机字节码指令概述
虛擬機(jī)字節(jié)碼指令
Java虛擬機(jī)的指令由一個(gè)字節(jié)長(zhǎng)度的、代表著某種特定操作含義的數(shù)字(稱(chēng)為操作碼,Opcode)以及跟隨其后的零至多個(gè)代表此操作所需參數(shù)(稱(chēng)為操作數(shù),Operands)而構(gòu)成。
一 基本數(shù)據(jù)類(lèi)型、加載和存儲(chǔ)指令
1、除了long和double類(lèi)型外,每個(gè)變量都占局部變量區(qū)中的一個(gè)變量槽(slot),而long及double會(huì)占用兩個(gè)連續(xù)的變量槽。
2、大多數(shù)對(duì)于boolean、byte、short和char類(lèi)型數(shù)據(jù)的操作,都使用相應(yīng)的int類(lèi)型作為運(yùn)算類(lèi)型。
?
加載和存儲(chǔ)指令
1、將一個(gè)局部變量加載到操作棧;
2、將一個(gè)數(shù)值從操作數(shù)棧存儲(chǔ)到局部變量表;
3、將一個(gè)常量加載到操作數(shù)棧;
存儲(chǔ)數(shù)據(jù)的操作數(shù)棧和局部變量表主要就是由加載和存儲(chǔ)指令進(jìn)行操作,除此之外,還有少量指令,如訪問(wèn)對(duì)象的字段或數(shù)組元素的指令也會(huì)向操作數(shù)棧傳輸數(shù)據(jù)。
二、const系列
該系列命令主要負(fù)責(zé)把簡(jiǎn)單的數(shù)值類(lèi)型送到棧頂。
三、push系列
該系列命令負(fù)責(zé)把一個(gè)整形數(shù)字(長(zhǎng)度比較小)送到到棧頂。
四、ldc系列
該系列命令負(fù)責(zé)把數(shù)值常量或String常量值從常量池中推送至棧頂。
五、load系列
5.1、load系列A
該系列命令負(fù)責(zé)把本地變量的送到棧頂。
5.2、load系列B
該系列命令負(fù)責(zé)把數(shù)組的某項(xiàng)送到棧頂。
六、store系列
6.1、store系列A
該系列命令負(fù)責(zé)把棧頂?shù)闹荡嫒氡镜刈兞俊?br /> 6.2、store系列B
該系列命令負(fù)責(zé)把棧頂項(xiàng)的值存到數(shù)組里。
七、pop系列
該系列命令似乎只是簡(jiǎn)單對(duì)棧頂進(jìn)行操作,
八、棧頂元素?cái)?shù)學(xué)操作及移位操作系列
該系列命令用于對(duì)棧頂元素行數(shù)學(xué)操作,和對(duì)數(shù)值進(jìn)行移位操作。
運(yùn)算指令
1、運(yùn)算或算術(shù)指令用于對(duì)兩個(gè)操作數(shù)棧上的值進(jìn)行某種特定運(yùn)算,并把結(jié)果重新存入到操作棧頂。
2、算術(shù)指令分為兩種:整型運(yùn)算的指令和浮點(diǎn)型運(yùn)算的指令。
3、無(wú)論是哪種算術(shù)指令,都使用Java虛擬機(jī)的數(shù)據(jù)類(lèi)型,由于沒(méi)有直接支持byte、short、char和boolean類(lèi)型的算術(shù)指令,使用操作int類(lèi)型的指令代替。
類(lèi)型轉(zhuǎn)換指令
對(duì)象創(chuàng)建與訪問(wèn)指令
? ?創(chuàng)建類(lèi)實(shí)例的指令:new。
? ?創(chuàng)建數(shù)組的指令:newarray、anewarray、multianewarray。
操作數(shù)棧管理指令
控制轉(zhuǎn)移指令
方法調(diào)用和返回指令
? ? invokevirtual 指令用于調(diào)用對(duì)象的實(shí)例方法,根據(jù)對(duì)象的實(shí)際類(lèi)型進(jìn)行分派(虛方法分派),這也是Java語(yǔ)言中最常見(jiàn)的方法分派方式。
異常處理指令
? ? 在Java程序中顯式拋出異常的操作(throw語(yǔ)句)都由athrow指令來(lái)實(shí)現(xiàn),除了用throw語(yǔ)句顯式拋出異常情況之外,Java虛擬機(jī)規(guī)范還規(guī)定了許多運(yùn)行時(shí)異常會(huì)在其他Java虛擬機(jī)指令檢測(cè)到異常狀況時(shí)自動(dòng)拋出。
同步指令
? ? 方法級(jí)同步 方法內(nèi)部一段指令序列的同步
總結(jié)
以上是生活随笔為你收集整理的Java虚拟机字节码指令概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java实现计算机图形学中点画线算法
- 下一篇: Java虚拟机内存模型初步学习