在 Java 中,JVM(例如 HotSpot)能够进行 JIT 编译,并且该技术用于通过将字节码编译为本机代码来加速执行。我的问题是,这在技术上是如何发生的?我的理解是,现代处理器将内存区域标记为只读部分和可执行部分,以防止恶意代码执行。因此,JVM 不能真正将新的“可执行代码”写入它可以访问的内存空间(即自我修改代码)。所以,我猜 JVM 会生成本地代码,将其写入文件,然后使用操作系统服务将本地代码动态加载到内存中,
我确实看到了这个答案:JIT 编译代码如何注入内存并执行?,但我很困惑为什么操作系统会允许用户程序读取+执行内存区域。其他操作系统(即 Linux 等)是否提供类似的东西以使 JIT 工作?
有人可以帮助澄清我的理解吗?