读书人

JVM学习札记十 之 字节码执行引擎

发布时间: 2012-10-21 09:00:07 作者: rapoo

JVM学习笔记十 之 字节码执行引擎

一、概述

jvm spec只给出了执行引擎的概念模型,并没有规定具体实现细节。执行引擎在执行时候可以解释执行、编译执行或直接由嵌入芯片的指令执行。引擎的行为使用指令集来定义。

java的目标是一次编写到处运行,为了达到这个目标,jvm指令集就不能依赖于任何硬件平台的指令,jvm指令集中就只有对栈的操作,没有对特定于硬件平台的寄存器的操作。当然jvm运行期优化的时候,可以针对不同的硬件平台提供不同的优化实现,比如充分利用硬件平台的寄存器提高访问速度。既然jvm执行引擎只有对栈的操作,那么我们下边就开始了解下栈的机构。

二、栈和栈帧

栈是线程私有的内存区域,每个线程都有一个栈,线程生则栈生,线程亡则栈灭(这里有一些栈的描述)。栈又由栈帧组成,每个方法调用都生成一个栈帧,方法调用结束则弹出栈帧。

栈帧又由多个部分组成:

1、局部变量表。包含方法参数和方法内部声明的局部变量,如果是实例方法,还有当前对象的this引用。局部变量表的大小在编译期就已经确定了,Locals:2即是;局部变量表所有的值也确定了,Local variable table:即是。此处可以先看class文件中方法的属性中局部变量表信息:

类的实例方法:

四、字节码执行引擎

字节码执行是基于对操作数的出栈和入栈操作进行的,相对比较简单,没有寄存器。当然运行期优化时候把字节码编译为本地代码的时候,会充分利用机器的寄存器的。

?

?

楼主的博文写得真是好,不仅有对概念的分析,还有对结果的印证。我想请问的是,你的method descriptor是如何看到的啊,有什么特别的工具吗? 楼主的博文写得真是好,不仅有对概念的分析,还有对结果的印证。我想请问的是,你的method descriptor是如何看到的啊,有什么特别的工具吗?
eclipse中直接打开class文件就看到了

读书人网 >编程

热点推荐