不,它不。除了不断的折叠,Javac并没有做太多的优化。在Java中,优化发生在运行时与JIT。
我创建了一个简短的例子来展示该方法在字节码中如何不被内联,即使它只被调用一次。私人和公共没有任何区别。
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello before method
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: invokestatic #5 // Method publicMethod:()V
11: invokestatic #6 // Method privateMethod:()V
14: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
17: ldc #7 // String Hello after method
19: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
22: return
public static void publicMethod();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #8 // String The public method
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
private static void privateMethod();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #9 // String The private method
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
最有可能不是因为java编译器不真正优化。他们把它留给JVM –
最好不要。 'foo'在它定义的类的外面是可见的。也许如果'foo'是私有的。 – bradimus
类似于:http://stackoverflow.com/questions/7772864/would-java-inline-methods-during-optimization –