JVM flow control in bytecode:修订间差异
建立內容為「 = Branch = <syntaxhighlight lang="java"> public int abs(int i) { if(i < 0) return -i; return i; } </syntaxhighlight> <syntaxhighlight lang="lis…」的新頁面 |
小 Riguz移动页面Flow control in bytecode至JVM flow control in bytecode,不留重定向 |
||
(未显示同一用户的4个中间版本) | |||
第29行: | 第29行: | ||
StackMapTable: number_of_entries = 1 | StackMapTable: number_of_entries = 1 | ||
frame_type = 7 /* same | frame_type = 7 /* same | ||
</syntaxhighlight> | |||
<syntaxhighlight lang="java"> | |||
public int compareWith2(int i) { | |||
if(i < 2) | |||
return -1; | |||
else if(i == 2) | |||
return 0; | |||
else | |||
return 1; | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="lisp"> | |||
public int compareWith2(int); | |||
descriptor: (I)I | |||
flags: (0x0001) ACC_PUBLIC | |||
Code: | |||
stack=2, locals=2, args_size=2 | |||
0: iload_1 | |||
1: iconst_2 | |||
2: if_icmpge 7 | |||
5: iconst_m1 | |||
6: ireturn | |||
7: iload_1 | |||
8: iconst_2 | |||
9: if_icmpne 14 | |||
12: iconst_0 | |||
13: ireturn | |||
14: iconst_1 | |||
15: ireturn | |||
LineNumberTable: | |||
line 8: 0 | |||
line 9: 5 | |||
line 10: 7 | |||
line 11: 12 | |||
line 13: 14 | |||
StackMapTable: number_of_entries = 2 | |||
frame_type = 7 /* same */ | |||
frame_type = 6 /* same */ | |||
} | |||
</syntaxhighlight> | |||
= Loop = | |||
<syntaxhighlight lang="java"> | |||
public void repeat(int count) { | |||
int sum = 0; | |||
for(int i = 0; i < count; i++) { | |||
sum += 1; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="lisp"> | |||
public void repeat(int); | |||
descriptor: (I)V | |||
flags: (0x0001) ACC_PUBLIC | |||
Code: | |||
stack=2, locals=4, args_size=2 | |||
0: iconst_0 | |||
1: istore_2 | |||
2: iconst_0 | |||
3: istore_3 | |||
4: iload_3 | |||
5: iload_1 | |||
6: if_icmpge 18 | |||
9: iinc 2, 1 | |||
12: iinc 3, 1 | |||
15: goto 4 | |||
18: return | |||
LineNumberTable: | |||
line 17: 0 | |||
line 18: 2 | |||
line 19: 9 | |||
line 18: 12 | |||
line 21: 18 | |||
StackMapTable: number_of_entries = 2 | |||
frame_type = 253 /* append */ | |||
offset_delta = 4 | |||
locals = [ int, int ] | |||
frame_type = 250 /* chop */ | |||
offset_delta = 13 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:JVM]] | [[Category:JVM]] |
2023年12月19日 (二) 07:00的最新版本
Branch
public int abs(int i) {
if(i < 0)
return -i;
return i;
}
public int abs(int);
descriptor: (I)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=2, args_size=2
0: iload_1
1: ifge 7
4: iload_1
5: ineg
6: ireturn
7: iload_1
8: ireturn
LineNumberTable:
line 3: 0
line 4: 4
line 5: 7
StackMapTable: number_of_entries = 1
frame_type = 7 /* same
public int compareWith2(int i) {
if(i < 2)
return -1;
else if(i == 2)
return 0;
else
return 1;
}
public int compareWith2(int);
descriptor: (I)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: iload_1
1: iconst_2
2: if_icmpge 7
5: iconst_m1
6: ireturn
7: iload_1
8: iconst_2
9: if_icmpne 14
12: iconst_0
13: ireturn
14: iconst_1
15: ireturn
LineNumberTable:
line 8: 0
line 9: 5
line 10: 7
line 11: 12
line 13: 14
StackMapTable: number_of_entries = 2
frame_type = 7 /* same */
frame_type = 6 /* same */
}
Loop
public void repeat(int count) {
int sum = 0;
for(int i = 0; i < count; i++) {
sum += 1;
}
}
public void repeat(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=4, args_size=2
0: iconst_0
1: istore_2
2: iconst_0
3: istore_3
4: iload_3
5: iload_1
6: if_icmpge 18
9: iinc 2, 1
12: iinc 3, 1
15: goto 4
18: return
LineNumberTable:
line 17: 0
line 18: 2
line 19: 9
line 18: 12
line 21: 18
StackMapTable: number_of_entries = 2
frame_type = 253 /* append */
offset_delta = 4
locals = [ int, int ]
frame_type = 250 /* chop */
offset_delta = 13