在Java中,JVM(例如HotSpot)能够进行JIT编译,并且该技术用于通过将字节码编译为本机代码来加速执行.我的问题是,这在技术上是如何发生的?我的理解是,现代处理器将内存区域标记为只读部分,以及可执行部分以防止恶意代码执行.因此,JVM无法真正将新的“可执行代码”写入它可以访问的内存空间(即自修改代码).所以,我猜测JVM生成本机代码,将其写入文件然后使用操作系统服务将该本机代码动态加载到内存中,并维护本机代码(函数)位置的地址的一些内部映射表在操作系统加载了这个动态代码之后,在内存中,它可以分支到那些本机指令.
我确实看到了这个答案:How is JIT compiled code injected in memory and executed?,但我很困惑为什么操作系统会允许用户程序READ EXECUTE内存区域.其他操作系统,即Linux等提供类似的东西,以便JIT工作吗?
有人可以帮助澄清我的理解吗?
最佳答案