使用 -Xcomp 将 Java 编译为本机代码是否总能增强性能?

问题描述 投票:0回答:1

Oracle 帖子中,提到 C2 将热点编译成高效的本机代码,并将其存储在代码缓存中。 之前的讨论指出,使用

-Xcomp
会将所有代码编译为本机代码,但这可能会降低整体性能。

这让我很困惑。完全在本机代码上运行不是最有效的吗?即使,正如一些评论所暗示的那样,“冷”本机代码比紧凑字节码更庞大(通常情况并非如此,如this post所示),考虑到 C/C++ 运行,它不应该仍然可行吗?只使用本机代码?

期待详细的解释,感激不尽

java c jvm jit
1个回答
0
投票

答案是否定的,因为 JIT 编译器的潜力是动态编译的一种形式。

动态编译使得利用运行时信息生成高性能本机代码成为可能。

例如,以下机制适用于火锅编译:

  1. 内联:小型、频繁调用的函数被内联到调用位置,以减少函数调用开销。
  2. 循环优化:使用循环展开(减少迭代次数)和循环剥离(处理循环外的特殊情况)等技术来最小化循环开销。
  3. 窥孔优化:通常通过替换指令序列来优化生成的机器代码的小部分以提高效率。
  4. 寄存器分配:经常使用的变量存储在CPU寄存器而不是内存中,以加快访问速度。

希望这篇文章可以帮助java程序员更好地理解JIT copmiler。

© www.soinside.com 2019 - 2024. All rights reserved.