在java中调用空方法是否使用资源?

在java中调用空方法是否使用资源?,java,performance,Java,Performance,我问这个问题的原因是因为在我的程序中,我有一个父类,它包含子类可能使用或不使用的方法。我只是想知道编译器是否针对每个子实例对此进行了优化,或者是否需要少量资源来检查是否存在某些内容?JVM使用某些启发式方法来决定内联哪些方法。该方法需要是一个热点(即被调用足够多的次数以使内联变得有价值),它不应该太大,也不应该被子类覆盖(这将修改其行为并使优化无效)。可能还有其他的启发法 在您的例子中,如果这些空方法从未被重写,并且它们被调用的次数足够多,那么它们可能会被内联 您还可以启用java命令行标志来查

我问这个问题的原因是因为在我的程序中,我有一个父类,它包含子类可能使用或不使用的方法。我只是想知道编译器是否针对每个子实例对此进行了优化,或者是否需要少量资源来检查是否存在某些内容?

JVM使用某些启发式方法来决定内联哪些方法。该方法需要是一个热点(即被调用足够多的次数以使内联变得有价值),它不应该太大,也不应该被子类覆盖(这将修改其行为并使优化无效)。可能还有其他的启发法

在您的例子中,如果这些空方法从未被重写,并且它们被调用的次数足够多,那么它们可能会被内联


您还可以启用java命令行标志来查看JIT在做什么(即,它是否内联方法),而不是猜测。请参阅这篇博文:

JVM使用某些试探法来决定内联哪些方法。该方法需要是一个热点(即被调用足够多的次数以使内联变得有价值),它不应该太大,也不应该被子类覆盖(这将修改其行为并使优化无效)。可能还有其他的启发法

在您的例子中,如果这些空方法从未被重写,并且它们被调用的次数足够多,那么它们可能会被内联


您还可以启用java命令行标志来查看JIT在做什么(即,它是否内联方法),而不是猜测。请参阅这篇博文:

我无法说明java编译器是否优化了空方法调用,但对于java中的性能问题,通常不需要查看这些方面。从回答问题的角度来看,这个答案可能是无用的,但是我已经运行了很多性能练习,而且在所有的实践中都有比这更重要的问题要考虑。我不能说java编译器是否优化了空方法调用,但是对于java中的性能问题,这类区域通常不适合观看。从回答你的问题的角度来看,这个答案可能是无用的,但我已经进行了大量的表演练习,在所有的实践中都有比这更重要的问题来考虑。