Javac

15.12.2020


Javac — оптимизирующий компилятор языка java, включенный в состав многих Java Development Kit (JDK).

Компилятор принимает исходные коды, соответствующие спецификации Java language specification (JLS), и возвращает байт-код, соответствующий спецификации Java Virtual Machine Specification (JVMS).

Javac написан на Java. Может вызваться непосредственно из java-программ (JSR 199).

История

Javac входил в состав JDK с первой версии.

13 ноября 2006 г. корпорация Sun Microsystems сменила лицензию Java Virtual Machine (JVM) и Java Development Kit (JDK) на GPL v2.

GNU Classpath начиная с версии 0.95 поддерживает компилирование и запуск javac при помощи GIJ и GCJ. Также поддерживается компиляция самой библиотеки Classpath, её утилит и примеров.

Структура javac

Исполнение javac разбито на следующие фазы:

  • parse — лексический и синтаксический анализ, генерация абстрактного синтаксического дерева,
  • enter — регистрация символов всех классов, определенных в программе,
  • process annotations — обработка аннотаций,
  • attribute — проверка типов, разрешение имен классов, свертка констант, вывод типов,
  • flow — анализ потока управления (достижимость операций), анализ обработки исключений, проверка обращений к неинициализированным данным, проверка корректности инициализации final переменных,
  • desugar — удаление синтаксического сахара (вложенные классы, классовые литералы, assert, foreach),
  • generate — создание файла .class.