Nein, tut es nicht. Javac macht nicht viel Optimierung jenseits konstanter Faltung. In Java erfolgt die Optimierung zur Laufzeit mit dem JIT.
Ich habe ein kurzes Beispiel erstellt, um zu zeigen, wie die Methode im Bytecode nicht inline wurde, obwohl sie nur einmal aufgerufen wurde. Privat und öffentlich machen keinen Unterschied.
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
}
Wahrscheinlich nicht, da Java-Compiler nicht wirklich optimieren. Sie überlassen das der JVM –
. Es war besser nicht. 'foo' ist außerhalb der Klasse sichtbar, in der es definiert ist. Vielleicht, wenn' foo' privat ist. – bradimus
ähnlich wie: http://stackoverflow.com/questions/7772864/would-java-inline-methods-during-optimization –