Java和其他语言一样,是指在编译时还是在JIT时内联方法的指令?
我们有很多只调用super方法的方法。这清楚地表明它不会忘记覆盖该方法。
例如,您已经覆盖了equals方法,但使用了与超级实现相同的哈希码。这使得后来的开发人员明白了hashcode方法并没有忘记实现。这同样适用于setter和getter或者添加和删除。
但是编译器应该内联这个方法。
答案 0 :(得分:5)
Java编译器在编译时很少进行优化。
相反,JIT根据实际使用的应用程序在运行时执行大多数优化。它可以内联方法,甚至最多两个“虚拟”方法。
答案 1 :(得分:1)
没有java没有。这对Java来说并不是一个有意义的概念。
至于hashCode与equals的讨论,一些IDE和样式检查器会警告你这样的错误,但我没有看到它与'inline'有任何关系。
答案 2 :(得分:1)
我不认为这可以在Java编译期间内联,因为Java中的所有函数都是虚拟的,并且直到运行时才知道实际调用哪个方法,它可能是子类中的一个。
但是,我认为您不必担心这些问题,因为HotSpot编译器应该非常擅长优化在应用程序运行时经常调用的代码。
答案 3 :(得分:0)
将方法标记为final
可为JIT编译器提供关于如何处理此方法的大提示。你不能强迫它内联方法,但给JIT更明确的信息只能帮助。