开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
什么是 jvm 的解释执行?
java程序在运行的过程中主要是执行编译过后的 .class 文件,也就是字节码对应的指令,一般来说这些字节码的指令是会按照顺序来执行的,这就是解释执行。
流程
我们在执行字节码文件的时候,首先它是会把这个字节码文件加载到 jvm 当中,之后在 jvm 当中是有一个执行引擎,这个执行引擎它会根据字节码的栈去进行逐行的解释执行,把字节码文件执行解释成本地的机器指令,这就是 jvm 解释执行的基本流程。
demo
我们可以使用代码进行演示什么是解释执行,以上使用 java 代码写了一个 main 方法里,然后有一个 executor_method 方法,这个方法用来模拟 jvm 中解释器,它的入参是一个 list,这个 list 是一个字节码的列表,也就是我们写的 java 代码编译过后的字节码。
比如当前传入的字节码是 new 这个指令,那么 executor_method 就会把 这个 new 指令编译成硬编码:0110101,或者是底层的汇编代码等。
如果传入的是 iload_1 那么同样的会去调用对应的硬编码,其他的也是相同的道理, jvm 的解释执行的作用也与之类似。
程序计数器
在 jvm 的基本结构中就包含了 程序计数器, 它的作用是用于记录当前执行的代码地址与行号,真正执行是 jvm 的执行引擎进行执行。\
特点
这种执行的特点是 jvm 启动的时候走解释执行时它的速度会非常的快,因为不需要把所有的代码都解释成本地的机器指令,只需要在执行某个类的时候,或者某个方法的时候执行引擎才会把对应的字节码文件进行逐行解释执行。