【发布时间】:2018-06-18 02:43:50
【问题描述】:
如果我理解正确,JIT 编译器会即时将代码(通常是字节码)编译为本机机器码,并将其插入已知内存中的适当位置。
一旦启动该进程,JIT 编译器如何保持领先于正在执行的机器代码?如何确保执行代码不会遇到用 GOTO 或等效项指向的空白内存,因为 JIT 还没有弄清楚接下来要放什么?
例如,给定一些(假)字节码:
03 01 move variable 1 onto the stack
b3 02 do something with the contents
在生成第一行本机代码并放入要运行的下一行之后,我假设 JIT 会给本机代码一个“GOTO”到一个空的内存集,以便在其中运行下一批指示。但是,如果机器码在 JIT 编译器有时间将第 2 行的机器码放入该槽之前到达那里怎么办?
【问题讨论】:
-
此主题的wikipedia 是否提供详细信息?
-
正在编译的代码在编译完成之前不会运行。一旦一个方法(或另一个编译单元)被完全编译,执行入口就会自动切换到一个新的编译版本。
标签: jvm executable jit machine-code