Java仮想マシン
[Wikipedia|▼Menu]
Java仮想マシン(JVM)のアーキテクチャ概要。ソースコードは一旦Javaバイトコードへとコンパイルされ、さらにインタプリタまたはJITコンパイラによりネイティブコードに変換されて実行される。Java APIとJVMの両者でJava実行環境(JRE)を構成する。

Java仮想マシン(ジャバかそうマシン、英語: Java virtual machine、Java VM、JVM)は、Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシンAPIやいくつかのツールとセットでJava実行環境(JRE)としてリリースされている。この環境を移植することで、さまざまな環境でJavaのプログラムを実行することができる。
命令セット仕様
ニーモニック表

(12、C6 などの数値は16進法表記)

 -0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
0-00
nop01
aconst_null02
iconst_m103
iconst_004
iconst_105
iconst_206
iconst_307
iconst_408
iconst_509
lconst_00A
lconst_10B
fconst_00C
fconst_10D
fconst_20E
dconst_00F
dconst_1
1-10
bipush11
sipush12
ldc13
ldc_w14
ldc2_w15
iload16
lload17
fload18
dload19
aload1A
iload_01B
iload_11C
iload_21D
iload_31E
lload_01F
lload_1
2-20
lload_221
lload_322
fload_023
fload_124
fload_225
fload_326
dload_027
dload_128
dload_229
dload_32A
aload_02B
aload_12C
aload_22D
aload_32E
iaload2F
laload
3-30
faload31
daload32
aaload33
baload34
caload35
saload36
istore37
lstore38
fstore39
dstore3A
astore3B
istore_03C
istore_13D
istore_23E
istore_33F
lstore_0
4-40
lstore_141
lstore_242
lstore_343
fstore_044
fstore_145
fstore_246
fstore_347
dstore_048
dstore_149
dstore_24A
dstore_34B
astore_04C
astore_14D
astore_24E
astore_34F
iastore
5-50
lastore51
fastore52
dastore53
aastore54
bastore55
castore56
sastore57
pop58
pop259
dup5A
dup_x15B
dup_x25C
dup25D
dup2_x15E
dup2_x25F
swap
6-60
iadd61
ladd62
fadd63
dadd64
isub65
lsub66
fsub67
dsub68
imul69
lmul6A
fmul6B
dmul6C
idiv6D
ldiv6E
fdiv6F
ddiv
7-70
irem71
lrem72
frem73
drem74
ineg75
lneg76
fneg77
dneg78
ishl79
lshl7A
ishr7B
lshr7C
iushr7D
lushr7E
iand7F
land
8-80
ior81
lor82
ixor83
lxor84
iinc85
i2l86
i2f87
i2d88
l2i89
l2f8A
l2d8B
f2i8C
f2l8D
f2d8E
d2i8F
d2l
9-90
d2f91
i2b92
i2c93
i2s94
lcmp95
fcmpl96
fcmpg97
dcmpl98
dcmpg99
ifeq9A
ifne9B
iflt9C
ifge9D
ifgt9E
ifle9F
if_icmpeq
A-A0
if_icmpneA1
if_icmpltA2
if_icmpgeA3
if_icmpgtA4
if_icmpleA5
if_acmpeqA6
if_acmpneA7
gotoA8
jsrA9
retAA
tableswitchAB
lookupswitchAC
ireturnAD
lreturnAE
freturnAF
dreturn
B-B0
areturnB1
returnB2
getstaticB3
putstaticB4
getfieldB5
putfieldB6
invokevirtualB7
invokespecialB8
invokestaticB9
invokeinterfaceBA
invokedynamicBB
newBC
newarrayBD
anewarrayBE
arraylengthBF
athrow
C-C0
checkcastC1
instanceofC2
monitorenterC3
monitorexitC4
wideC5
multianewarrayC6
ifnullC7
ifnonnullC8
goto_wC9
jsr_wCA
breakpointCB
未定義CC
未定義CD
未定義CE
未定義CF
未定義
D-D0
未定義D1
未定義D2
未定義D3
未定義D4
未定義D5
未定義D6
未定義D7
未定義D8
未定義D9
未定義DA
未定義DB
未定義DC
未定義DD
未定義DE
未定義DF
未定義
E-E0
未定義E1
未定義E2
未定義E3
未定義E4
未定義E5
未定義E6
未定義E7
未定義E8
未定義E9
未定義EA
未定義EB
未定義EC
未定義ED
未定義EE
未定義EF
未定義
F-F0
未定義F1
未定義F2
未定義F3
未定義F4
未定義F5
未定義F6
未定義F7
未定義F8
未定義F9
未定義FA
未定義FB
未定義FC
未定義FD
未定義FE
impdep1FF
impdep2

オペコード解説.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}記事参照オペコード
スタック

bipush、 sipush - byte値、 short値をスタックに積む。

ldc - コンスタントプール内の4バイトの定数(int値、float値、java.lang.String)の内1バイト以内でエントリ番号を指定できるものをスタックに積む。

ldc_w - エントリ番号が1バイトでは足りないときに使う。

ldc2_w - コンスタントプール内の8バイトの定数(long値、double値)をスタックに積む。

iconst_m1、 iconst_0、 iconst_1、 iconst_2、 iconst_3、 iconst_4、 iconst_5 - intの-1、0、1、2、3、4、5をスタックに積む。

lconst_0、 lconst_1 - longの0、1をスタックに積む

fconst_0、 fconst_1、 fconst_2 - floatの0、1、2をスタックに積む

dconst_0、 dconst_1 - doubleの0、1をスタックに積む。

aconst_null - スタックにnullを積む。

pop、 pop2 - スタックから1、2ワード取り除く

dup、 dup2

dup_x1、 dup2_x1

dup_x2、 dup2_x2

swap

局所変数

iload、 lload、 fload、 dload、 aload - 局所変数からint値、 long値、 float値、 double値、 参照値を取り出してスタックに積む。

iload_0、 iload_1、 iload_2、 iload_3 - 0、1、2、3番目の局所変数からint値を取り出してスタックに積む。

lload_0、 lload_1、 lload_2、 lload_3 - 0、1、2、3番目の局所変数からlong値を取り出してスタックに積む。

fload_0、 fload_1、 fload_2、 fload_3 - 0、1、2、3番目の局所変数からfloat値を取り出してスタックに積む。

dload_0、 dload_1、 dload_2、 dload_3 - 0、1、2、3番目の局所変数からdouble値を取り出してスタックに積む。

aload_0、 aload_1、 aload_2、 aload_3 - 0、1、2、3番目の局所変数から参照値を取り出してスタックに積む。

istore、 lstore、 fstore、 dstore、 astore - int値、 long値、 float値、 double値、 参照値を局所変数に格納。

istore_0、 istore_1、 istore_2、 istore_3 - int値を0、1、2、3番目の局所変数に格納する。

lstore_0、 lstore_1、 lstore_2、 lstore_3 - long値を0、1、2、3番目の局所変数に格納する。

fstore_0、 fstore_1、 fstore_2、 fstore_3 - float値を0、1、2、3番目の局所変数に格納する。

dstore_0、 dstore_1、 dstore_2、 dstore_3 - double値を0、1、2、3番目の局所変数に格納する。

astore_0、 astore_1、 astore_2、 astore_3 - 参照値を0、1、2、3番目の局所変数に格納する。

条件付きジャンプ

ifeq、 ifnull、 iflt、 ifle、 ifne、 ifnonnull、 ifgt、 ifge - スタックの値が0、 null、 0未満、 0以下、 0以外、 null以外、 0より大きい、 0以上の場合に指定の番地に制御を移す。

if_icmpeq、 if_icmpne、 if_icmplt、 if_icmpgt、 if_icmple、 if_icmpge - 2つのint値が等しい、等しくない、<、>、≦、≧の場合に指定の番地に制御を移す。

if_acmpeq、 if_acmpne - 2つの参照値が等しい、等しくない場合に指定の番地に制御を移す。

ジャンプ

goto、 goto_w - それぞれ2バイト形式(符号付き16ビット)、4バイト形式(符号付き32ビット)でもつ相対番地をこの命令の番地に加えた番地に制御を移す(JavaにGO TO命令はなくても、このようにJava仮想マシンにgoto命令はある)。

jsr、 jsr_w - サブルーチンの先頭に制御を移す。gotoと違い、戻り番地を保存する。戻り番地の値はそれぞれ、制御を移す前の番地+3、制御を移す前の番地+5となる。

ret - サブルーチンから呼び出し元の戻り番地に制御を移す。番地が格納されている局所変数を指定する。

lookupswitch - switch文のcase式の値が不連続である場合に、値を探しながら飛び越し先を探し、飛び越しを行う。

tableswitch - switch文のcase式の値が連続である場合に、(キーがインデクス値、値が飛び越し先番地の)表を使って飛び越しを行う。(高速である)

メソッド呼び出し・復帰

invokevirtual - インスタンスメソッドを呼び出す。

invokespecial - インスタンス初期化メソッド、プライベートメソッド、スーパークラスのインスタンスメソッドを呼び出す。

invokestatic - クラスメソッドを呼び出す

invokeinterface - インターフェイスメソッドを呼び出す。


return - スタックに値を残さずに、呼び出し元の戻り番地に制御を移す。

ireturn、 lreturn、 freturn、 dreturn、 areturn - スタックに int値、 long値、 float値、 double値を残して、サブルーチンの呼び出し元の戻り番地に制御を移す。

型キャスト


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:39 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef