2014-10-22 5 views
0

Использует ли компилятор Java некоторые преобразования для оптимизации вызовов методов? Или он всегда генерирует точное представление источника с помощью простых оптимизаций, таких как удаление мертвого кода?Оптимизация компилятора вызовов методов

В частности, если мы имеем пример ниже:

public static void main(String[] args) { 
    System.out.println(foo()); 
    System.out.println(foo()); 
    System.out.println(foo()); 
    System.out.println(bar()); 
    System.out.println(bar()); 
    System.out.println(bar()); 
} 

public static int foo() { 
    int[] arr = {1, 2, 3, 4}; 
    return arr[0]; 
} 

public static int bar() { 
    return 10; 
} 

ли попытка компилятор заменить вызов bar (или даже, возможно, foo) с вызовом для печати целое 10?

public static void main(String[] args) { 
    System.out.println(1); 
    System.out.println(1); 
    System.out.println(1); 
    System.out.println(10); 
    System.out.println(10); 
    System.out.println(10); 
} 

Я знаю метод называется встраивание, что может привести к таким преобразованиям, но мне было интересно, если компилятор Java (по крайней мере, javac в Oracle JDK) применяет его, или, если это всегда откладывается до JVM.

+3

Ответ «это зависит». Java имеет [JIT] (http://en.wikipedia.org/wiki/Just-in-time_compilation), а также делает некоторые способы оптимизации при преобразовании источника в байтовый код. Таким образом, в принципе, до тех пор, пока он не изменит наблюдаемое поведение кода, Java может в любой момент сделать любую оптимизацию. – aruisdante

+0

См. Http://stackoverflow.com/questions/2096361/are-there-inline-functions-in-java – aruisdante

+0

И: http://stackoverflow.com/questions/8256202/how-does-the-java-jit -compiler-оптимизируют-мой-код – aruisdante

ответ

1

Этот тип оптимизации называется constant folding.

Эти (и другие оптимизации), которые не влияют на наблюдаемый результат программ, допускаются спецификацией Java.

Однако, действительно ли данный компилятор фактически выполняет эти оптимизации, полностью зависит от реализации.

Смежные вопросы