JAVA字节码执行引擎总结

Posted liwanping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA字节码执行引擎总结相关的知识,希望对你有一定的参考价值。

字节码指令

技术图片

大部分操作指令都有对应不同类型的不同指令,比如iload istore ireturn表示加载(整形变量进操作数栈)、定义一个整形局部变量、返回一个int类型值

return 1+1==》iconst 2;ireturn

编译期优化:直接将1+1定义为常量2 运行时就不用再做计算了

技术图片

技术图片

这段代码操作数栈的最大深度是 2

iadd:操作数栈顶两个元素出栈(pop)相加之后将结果放回栈顶

  1. begin
  2. iload_0 // push the int in local variable 0 onto the stack
  3. iload_1 // push the int in local variable 1 onto the stack
  4. iadd // pop two ints, add them, push result
  5. istore_2 // pop int, store into local variable 2
  6. end

技术图片

https://blog.csdn.net/airjordon/article/details/72867397

局部变量槽的复用:

技术图片

gc的时候buff仍然在局部变量表中因此不会回收!

技术图片

此时虽然buff已经超出了作用域,但是手动GC仍然不会回收,因为slot槽复用。技术图片

这个时候GC生效了,因为定义a会对局部变量表进行读写。

技术图片

https://blog.csdn.net/android_jiangjun/article/details/78436719

方法调用

解析调用:

技术图片

分派调用:

静态分派:方法重载

动态分派:方法重写

技术图片

以上是关于JAVA字节码执行引擎总结的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机字节码操作引擎-----基于栈的字节码解释引擎

Java虚拟机--虚拟机字节码执行引擎

深入理解Java虚拟机06--虚拟机字节码执行引擎

字节码解释执行引擎

深入理解java虚拟机:字节码执行引擎介绍-栈帧

深入JAVA虚拟机之字节码执行引擎