Что такое sjavac, для кого он и как его использовать?

В списках рассылки OpenJDK был некоторый шум об инструменте под названием sjavac. Кроме того, существуют два связанных JEP: JEP 139: Улучшение javac для улучшения скорости сборки и JEP 199: Компиляция Smart Java, фаза Два.

Мои вопросы:

  • Что такое инструмент sjavac?
  • Кому он предназначен?
  • Как его использовать?

Отказ от ответственности: Я ответил на вопрос. Просто хотел довести знания этого инструмента до сообщества StackOverflow и создать ссылку на будущие вопросы о sjavac.

Ответ 1

Что такое инструмент sjavac?

Инструмент sjavac представляет собой (предположительно умную) оболочку вокруг javac, разработанную в Oracle и предназначенную для предоставления следующих возможностей:

  • инкрементные компиляции - перекомпилируйте только то, что необходимо
  • параллельная компиляция - использовать во время компиляции более одного ядра.
  • сохранить компилятор в горячей виртуальной машине - повторно использовать Jav-javac-экземпляр для последовательных вызовов

При перекомпиляции набора исходных файлов javac просматривает временные метки файлов .java и .class, чтобы определить, что сохранить и что нужно перекомпилировать. Это невероятно грубо и может быть разрушительным для больших баз кода. В дополнение к отметкам времени sjavac проверяет открытый API зависимостей, чтобы судить, какие файлы необходимо перекомпилировать.

Sjavac также пытается разбить компиляцию на множественные вызовы javac. Другими словами, он обеспечивает высокий уровень parallelism для процесса сборки.

Наконец, инструмент sjavac разделяется на клиентскую часть и часть сервера, которая позволяет вам покинуть sjavac, работающий в фоновом режиме, JIT'ed и готов к использованию в последовательных вызовах.

Кому он предназначен?

Люди, которые работают над большими проектами и часто перекомпилируют базу кода во время разработки, рекомендуется попробовать sjavac. (Имейте в виду, однако, что этот инструмент в настоящее время находится в разработке, и все еще есть открытые проблемы.)

Как его использовать?

Инструмент еще не поставляется с OpenJDK, поэтому вам нужно будет получить его из OpenJDK jdk9/dev-репозитория. Кроме того, еще нет пусковой установки, поэтому вы вызываете ее с помощью java com.sun.tools.sjavac.Main.