【发布时间】:2017-10-21 15:30:57
【问题描述】:
如果它们是内联的,javac 是否会遗漏私有方法? 例如
public class Test {
public static void main(String[] args){
System.out.println(sayHello());
}
private static String sayHello(){
return "Hello World";
}
}
但是如果这个方法被反射访问呢?
System.out.println(Test.class.getMethod("sayHello").invoke(null));
编译器如何知道是否内联方法并删除它?
【问题讨论】:
-
是什么让你觉得这个方法被编译器内联了?它没有内联。内联可能发生在运行时,在 JIT 编译器中。
-
您可以通过使用
javap反汇编编译的类来自己尝试一下。它很可能不会丢弃该方法。 -
编译器优化永远不会改变行为。
-
“
javac是否遗漏了私有方法...” - 不,在任何情况下都不会。而javac无论如何也不做内联。 (您可以使用javap自己检查这两件事。)
标签: java javac compiler-optimization private-methods