В чем преимущество настройки java.awt.headless = true?

Я прошел

  1. Установка java.awt.headless = true программно
  2. http://www.oracle.com/technetwork/articles/javase/headless-136834.html и
  3. Некоторые другие ссылки тоже.

Нигде не объясняется польза от использования этого флага.

Это выигрыш в производительности? Если да, есть ли даже грубая оценка, какой будет выигрыш в производительности? (Я знаю, что ответы на вопросы о производительности полностью зависят от конкретного случая, но было бы неплохо узнать, сообщил ли кто-то о хорошей пользе от этого).

Ответ 1

Безголовые и безголовые режимы разные, у них есть разные функции. Если вам нужно только сделать некоторые простые вещи, например, рендеринг шрифтов, то да, вы сможете сделать это в режиме безглавых.

Вы всегда можете проверить кишки источников JDK и сами убедиться, какие методы зависят от режима без головок. Но, на мой взгляд, даже если прирост производительности пренебрежимо мал, лучше всего передать java.awt.headless в любом случае (если вам не нужен "полный" режим графического интерфейса).

Любой поставщик может использовать это свойство. Вы никогда не знаете, будут ли они что-то делать, если у вас есть полный графический интерфейс. Итак, мое эмпирическое правило: всегда используйте java.awt.headless для консольных приложений и серверов. Это не повредит.

Ответ 2

Одним из возможных преимуществ является то, что если вы вызываете приложение, пытаясь что-то сделать в окне, возможно, вызывая приложение несколько раз, это не нарушит фокус клавиатуры/мыши, если приложение работает в режиме без головы.

По крайней мере, на Mac у меня были огромные проблемы с запуском скрипта, который периодически запускает Java-приложение каждые несколько секунд, пытаясь редактировать в другом окне. Безголовый режим исправляет это.

Ответ 3

Я пришел к этому вопросу, ища способ бежать без головы. ; -P При запуске openjdk 1.8 моё приложение иногда падает при работе через сеанс SSH без переадресации X. Это приложение, выводящее графику на ЖК-дисплей с GPIO-драйвером с драйвером, написанным на Java, и без графики. Иногда AWT хочет получить графические возможности от X11, который не работает, а затем выдает исключение. Я думаю, что установка этого свойства решит мою проблему, но это трудно проверить, потому что оно не воспроизводимо на 100%...