2017-04-18 38 views
0

我问的原因是因为在我的程序中,我有一个父类,它持有可能会或可能不会被孩子使用的方法。我只是想知道编译器是否为每个子实例优化了这个。或者它是否仍然需要一点点资源来检查是否有什么东西?在java中调用一个空方法使用资源吗?

预先感谢您!

+1

我不能说是否java编译器优化了空方法调用,但对于java中的性能问题,这些区域通常不是看的地方。从回答你的问题来看,这个答案可能毫无用处,但我已经进行了大量的表演练习,并且在所有的实用性中都有比这更重要的问题要考虑。 – Jason

回答

2

JVM使用某些启发式来决定内联哪些方法。该方法需要是一个热点(即调用足够的时间来使内联值得),它不应该很大,并且不应该被子类覆盖(这会改变它的行为并使优化失效)。也可能有其他启发式。在你的情况下,如果这些空方法不会被覆盖,并且它们被调用的次数足够多,它们可能会被内联。

不用猜测,也可以启用java命令行标志来查看JIT正在做什么(即是否内联了方法)。看到这篇博客文章:https://techblug.wordpress.com/2013/08/19/java-jit-compiler-inlining/

相关问题