ByteCode说明:我理解得很好

时间:2011-12-17 00:38:09

标签: java jvm bytecode

我正在学习Java字节码。 我想知道我是否正确理解了这个字节码过程

我没有完成,但它只是以良好的方式开始......

00000000    aload_0 
// load param1 (String)
// Stack is [StringParam]
00000001    invokevirtual       char[] java.lang.String.toCharArray() 
// split variable in an array of char
// Stack is [ReferenceToCharArray] ?
00000004    dup 
// duplicate the top of operand stack and put it back at the end
// Stack is now [ReferenceToCharArray ReferenceToCharArray]
00000005    arraylength 
// Return array's length
// Stack is now [ReferenceToCharArray ArrayLength]
00000006    iconst_2 
// push 2 in stack
// Stack is now [ReferenceToCharArray ArrayLength 2]
00000007    if_icmpge           pos.00000013
// If the Array length is greater or equals to 2
// Stack is now [ReferenceToCharArray]
00000013    areturn
// Return the array
// Stack is empty

1 个答案:

答案 0 :(得分:1)

在调用virtual之后你的堆栈是错误的,param1不再是堆栈顶部。而且我认为3不会被放在堆栈上。

if_icmpge真正做的是将invokevirtual返回的char数组的长度与2进行比较