我问的原因是因为在我的程序中我有一个父类,它包含子类可能使用或不使用的方法。我只是想知道编译器是否为每个子实例优化了这个,或者它是否需要少量资源来检查是否存在某些内容?
答案 0 :(得分:2)
JVM使用某些启发式方法来决定内联的方法。该方法需要是一个热点(即被调用足够的时间以使内联值得),它不应该非常大并且它不应该被子类覆盖(这会改变它的行为并使优化无效)。可能还有其他的启发式方法。
在你的情况下,如果这些空方法永远不会被覆盖,并且它们被调用足够多次,它们可能会被内联。
您可以启用Java命令行标志来查看JIT正在执行的操作(即,如果它是内联或不是方法),而不是猜测。请参阅此博文:https://techblug.wordpress.com/2013/08/19/java-jit-compiler-inlining/