Введение

Компилятор Java

GNU Compiler for Java (GCJ) — это устаревший свободный компилятор для языка программирования Java. Он входил в состав GNU Compiler Collection. GCJ компилирует исходный код Java в байт-код виртуальной машины Java (JVM) или в машинный код для ряда архитектур процессоров. Он также мог компилировать файлы классов и целые JAR-архивы, содержащие байт-код, в машинный код.

История

Оригинальный исходный код библиотек времени выполнения GCJ происходит из проекта GNU Classpath, но существует различие в коде между библиотеками libgcj. GCJ 4.3 использует Eclipse Compiler for Java в качестве фронтенда. В 2007 году была проделана значительная работа по реализации поддержки двух графических API Java в GNU Classpath: AWT и Swing. Программная поддержка AWT все еще находится в стадии разработки. "Как только поддержка AWT будет реализована, можно будет рассмотреть поддержку Swing. Существует как минимум одна свободная частичная реализация Swing, которую можно использовать". GNU CLASSPATH так и не был доведен до уровня Java 1.2 и теперь, по всей видимости, полностью заброшен. По состоянию на 2015 год новые разработки для GCJ не анонсировались, и продукт находился в режиме поддержки, в то время как разработка Java с открытым исходным кодом в основном велась в рамках OpenJDK. GCJ был удален из основного репозитория GCC 30 сентября 2016 года. Объявление об этом было сделано с выпуском GCC 7.1, который не включает его. GCJ остается частью GCC 6.

Выступление

Функция компиляции в GCJ должна запускаться быстрее, чем эквивалентный байт-код, выполняемый в JVM, при компиляции Java-кода в машинный код.

Компилированный интерфейс (CNI)

Compiled Native Interface (CNI), ранее известный как "Cygnus Native Interface", — это программный каркас для GCJ, позволяющий Java-коду вызывать и быть вызываемым из нативных приложений (программ, предназначенных для конкретной аппаратной и операционной платформы) и библиотек, написанных на C++. CNI тесно соответствует JNI (Java Native Interface), который является стандартным компонентом различных виртуальных машин Java.