在 Java 中内联

2022-09-01 03:01:43

在C++我可以声明一个“内联”方法,编译器可能会内联它。据我所知,Java中没有这样的关键字。

如果 JVM 决定这样做,那么内联就完成了吗?我能以某种方式影响这个决定吗?


答案 1

其他几个答案表明,只有最终方法可以内联 - 这不是真的,因为HotSpot足够聪明,能够内联非最终方法,只要它们还没有被覆盖。当加载重写该方法的类时,它可以撤消其优化。显然,使方法最终意味着永远不需要...

基本上让JVM完成它的工作 - 它可能比你更好地确定内联的位置。

您是否有这样的情况,即您确信JVM做得不好?假设您正在使用HotSpot,您是否尝试过使用服务器版本而不是客户端?这可以产生巨大的差异。


答案 2

尽管java编译器可以执行内联(对于简短的早期绑定方法),但真正的内联将由JIT编译器完成。JIT(HotSpot)编译器将能够,甚至内联虚拟方法。与它交互的最佳方式是编写简单明了的代码。最有可能的是,使用反射的代码将不允许内联。

希望有所帮助。


推荐