java - 字节码指令 : Do I understand well

标签 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

最佳答案

调用虚拟后,您的堆栈错误,param1 不再位于堆栈顶部。而且我不认为 3 会被放入堆栈中。

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

关于java - 字节码指令 : Do I understand well,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541762/

相关文章:

java - 主要垃圾收集是否需要 JVM 之外的内存?

Java 8 - 永久代支持 - 替代方案

java - 如何在 PySpark 中启用公平调度程序?

java - java中如何知道一个对象有多少个引用

java - $.ajax JSON 检索失败 - JSP

java - Scala - Java 互操作 : can Scala emit enums in bytecode for Java to consume?

java - 抛出 vs Java 字节码

安卓字节码 : value of some variables not defined

java - 0/0 的 Quartz cron 表达式

java - 重新启动应用程序后 SQLite DB 被删除