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