GCJ: Java без JVM

Да, именно так: Java без JVM. В данной статье рассмотрим работу с Java (компиляция/запуск), не используя такие средства, как JVM/JDK и подобное. Ах да, и никаких on-line инструментов, все только локально :) А воспользуемся мы таким инструментом, как GCJ:

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

Установка

В unix-системах достаточно выполнить команду установки пакета apt-get:

Sample code
1
$ sudo apt-get install gcj-jdk

В результате будет скачано и установлено около десяти мегабайт ресурсов. После чего инструмент готов к использованию.

Использование

Пишем Java код, компилируем в бинарник и запускаем:

Sample code
1
2
3
4
5
6
7
8
9
10
asaskevich@asaskevich-U31SD:~$ cat > Test.java
public class Test {
public static void main(String[] args) {
System.out.println("Hi from gcj!");
}
}
^C
asaskevich@asaskevich-U31SD:~$ gcj --main=Test Test.java
asaskevich@asaskevich-U31SD:~$ ./a.out
Hi from gcj!

Строка --main=Test говорит о том, что точка входа в приложение находится в классе Test.

Плюсы

  • Не требует установки JVM для запуска
  • Только машинный код
  • Преобразует в машинный код файлы типа *.java *.jar *.class
  • Приложение запускается быстрее, чем через JVM

Минусы

  • Код исполняется не всегда быстрее, чем байт-код в JVM
  • Размер выходного файла обычно больше аналогичного *.class файла
  • Применение бинарника ограничено платформой, для которой файл был скомпилирован

Заключение

Конечно, плюсов и минусов может быть больше - я лишь поверхностно рассмотрел данный вопрос. Использовать JVM/JDK все же привычнее, но не стоит упускать из вида и данный инструмент - например, если вдруг придется писать приложение для устройства, ограниченного в ресурсах, а для этих целей хочется использовать язык, который знаешь лучше всего (в данном случае Java).

Ссылки