Java是否有编译器指令来内联方法?

时间:2011-08-03 13:44:17

标签: java compiler-construction inline

Java和其他语言一样,是指在编译时还是在JIT时内联方法的指令?

我们有很多只调用super方法的方法。这清楚地表明它不会忘记覆盖该方法。

例如,您已经覆盖了equals方法,但使用了与超级实现相同的哈希码。这使得后来的开发人员明白了hashcode方法并没有忘记实现。这同样适用于setter和getter或者添加和删除。

但是编译器应该内联这个方法。

4 个答案:

答案 0 :(得分:5)

Java编译器在编译时很少进行优化。

相反,JIT根据实际使用的应用程序在运行时执行大多数优化。它可以内联方法,甚至最多两个“虚拟”方法。

答案 1 :(得分:1)

没有java没有。这对Java来说并不是一个有意义的概念。

至于hashCode与equals的讨论,一些IDE和样式检查器会警告你这样的错误,但我没有看到它与'inline'有任何关系。

答案 2 :(得分:1)

我不认为这可以在Java编译期间内联,因为Java中的所有函数都是虚拟的,并且直到运行时才知道实际调用哪个方法,它可能是子类中的一个。

但是,我认为您不必担心这些问题,因为HotSpot编译器应该非常擅长优化在应用程序运行时经常调用的代码。

答案 3 :(得分:0)

将方法标记为final可为JIT编译器提供关于如何处理此方法的大提示。你不能强迫它内联方法,但给JIT更明确的信息只能帮助。