Compiler construction 有没有办法冻结luajit(或某些jit)生成的代码,并在没有jit编译器的情况下使用它?

Compiler construction 有没有办法冻结luajit(或某些jit)生成的代码,并在没有jit编译器的情况下使用它?,compiler-construction,lua,jit,luajit,Compiler Construction,Lua,Jit,Luajit,由于luajit或其他地方的jit编译器需要相当多的内存(对于嵌入式系统),我想知道: 除了冻结代码并在没有jit的情况下重用程序外,还有没有其他方法可以在内存充足的系统上运行luajit(或其他基于jit的VM) 不,LuaJIT不能这样做,因为编译后的代码中没有足够的信息在另一个进程中重新创建它(同时确保它仍然等同于原始字节码)。部分内存成本是冗余代码,以及在编译后的代码失效时中止执行所需的信息。您无法真正避免这种情况,因为JIT编译的代码在运行时可能违反的某些假设下仍然是专门化的,无论它是

由于luajit或其他地方的jit编译器需要相当多的内存(对于嵌入式系统),我想知道:


除了冻结代码并在没有jit的情况下重用程序外,还有没有其他方法可以在内存充足的系统上运行luajit(或其他基于jit的VM)

不,LuaJIT不能这样做,因为编译后的代码中没有足够的信息在另一个进程中重新创建它(同时确保它仍然等同于原始字节码)。

部分内存成本是冗余代码,以及在编译后的代码失效时中止执行所需的信息。您无法真正避免这种情况,因为JIT编译的代码在运行时可能违反的某些假设下仍然是专门化的,无论它是编译的JIT还是AOT。另外,在任何情况下,你都需要完整的字节码和解释器,尽管按照桌面标准,它们很小,但对于某些嵌入式平台来说,它们并不是微不足道的。为什么?如果我理解正确的话,luajit所做的(简化的)就是获取一些代码路径,将它们(使用运行时数据)编译成机器代码,并让程序运行机器代码而不是字节码。冻结这些结果有什么问题?