在 Oracle 帖子中,提到 C2 将热点编译成高效的本机代码,并将其存储在代码缓存中。 之前的讨论指出,使用
-Xcomp
会将所有代码编译为本机代码,但这可能会降低整体性能。
这让我很困惑。完全在本机代码上运行不是最有效的吗?即使,正如一些评论所暗示的那样,“冷”本机代码比紧凑字节码更庞大(通常情况并非如此,如this post所示),考虑到 C/C++ 运行,它不应该仍然可行吗?只使用本机代码?
期待详细的解释,感激不尽
答案是否定的,因为 JIT 编译器的潜力是动态编译的一种形式。
动态编译使得利用运行时信息生成高性能本机代码成为可能。
例如,以下机制适用于火锅编译:
希望这篇文章可以帮助java程序员更好地理解JIT copmiler。