среда, 25 мая 2011 г.

Ассемблерный код для Java классов

Sun JVM компилирует байт код в довольно красивый ассемблерный код, например:

Дано класс:

public class AssemblerTestRunner {

    private int counter = 0;

    public void execute() {
        counter += 1;
    }

}

Ассемблерный код метода:

SUB    ESP,8  # Create frame
013     INC    [ECX + #8] ! Field assemblertest/AssemblerTestRunner.counter
016     ADD    ESP,8 # Destroy frame

Как это проверить самому?

  • Для этого нужно достать отладочную версию JDK, например тут: http://download.java.net/jdk6/
  • Указать в параметрах запуска java: -server -XX:CompileThreshold=1 -XX:MaxInlineSize=0 -XX:FreqInlineSize=1000 -XX:+PrintCompilation -XX:+PrintOptoAssembly. Тут: -XX:+PrintOptoAssembly самый важный и он доступен только на отладночной версии
  • Написать тестовую программу и запустить, получите в логах или в каталоге выполненния файл hotspot.log

Описание опций можно найти тут: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

Комментариев нет: