Как сократить время запуска виртуальной машины OpenJDK Java8? - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно попытаться улучшить время запуска относительно большого безголового Java-приложения, настраивающего параметры VM / launcher (предпринимаются отдельные усилия для достижения той же цели, настраивая реальный код).

Выбранная виртуальная машина является стандартной OpenJDK Java-8.

openjdk version "1.8.0_102-internal"
OpenJDK Runtime Environment (build 1.8.0_102-internal-b14, profile compact3)
OpenJDK VM (build 25.102-b14, interpreted mode)

Хост-компьютер представляет собой встроенный (32-разрядный) ARM7 под управлением Linux.

model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 38.40

Цель, как сказано, состоит в том, чтобы улучшить время запуска; производительность во время выполнения приемлема.

Может кто-нибудь предложить настройки самой виртуальной машины, чтобы значительно улучшить время выполнения заказа.

Примечание: я знаю о возможных преимуществах опции "-client" и буду экспериментировать с ней как можно скорее; Есть ли возможные недостатки? Любой другой?

Пояснение:

«Интересное число» - это время, необходимое от включения целевого устройства до того момента, когда приложение будет готово принимать команды.

Он состоит из трех частей:

  • Время загрузки системы: выходит за рамки этого вопроса. Единственное влияние - Java запускается довольно рано, поэтому некоторые другие фоновые процессы могут украсть вычислительную мощность; возможно, может помочь какое-то масштабирование приоритетов за счет какого-то другого процесса.
  • Запуск виртуальной машины Java: это основное внимание к этому вопросу.
  • Время запуска приложения: это следует вычислять при оптимизации, но сама оптимизация приложения (например, отложенная загрузка «неиспользуемых» классов ») не является частью этого вопроса, однако следует помнить, потому что любое решение сокращение времени запуска виртуальной машины, но увеличение времени запуска приложения не сильно поможет.

1 Ответ

0 голосов
/ 11 мая 2018

1.Компиляция AOT ($$$)

В зависимости от глубины вашего кармана, вы можете попробовать Excelsior JET компилятор, который поддерживает архитектуру ARM.Скомпилируйте пакет и получите оптимизированный и оптимизированный исполняемый файл для платформы, что значительно снизит время запуска JVM.Доступна бесплатная пробная версия на 180 дней, так что достаточно оценить вариант.

2.Компактные профили (бесплатно)

Java SE 8 Embedded имеет Компактные профили .Ваш журнал запуска JVM предполагает, что ваше приложение использует compact3 (самый большой из 3).

Каждый профиль, по сути, представляет собой набор API-интерфейсов Java (и, следовательно, связанных классов), и compact3 содержит все API-интерфейсы из compact2 с дополнениями, а compact2 содержит все API от compact1 с дополнениями.

Запуск javac -profile 2 (или даже -profile 1) покажет вам ошибки, когда вы используете API вне указанного профиля.jdeps -P покажет вам профиль для каждого использованного API.Возможно, вы могли бы избежать использования API из более высоких профилей, позволяя скомпилировать ваше приложение в API более низкого профиля.Это приведет к меньшему количеству классов, загружаемых загрузчиком начальной загрузки / системным классом, и, следовательно, к более быстрому запуску JVM.См. здесь для получения дополнительной информации.

3.Скомпилируйте свою собственную JVM (бесплатную, сложную)

Обширные знания в этой презентации (также обсуждение вокруг Компактные профили )

4.Модули Java 9 (бесплатно, но на стадии альфа) * ​​1042 * Я не уверен, существует ли еще успешный порт JVM 9 для ARM. Zulu Azul Systems только до Java 8 . OpenJ9 - это попытка Eclipse, однако ARM-порт кажется немного экспериментальным .Посмотрите, возможно, вы могли бы получить некоторую тягу для вашего приложения. Это потребует создания модулей в вашей кодовой базе и создания JRE только с модулями, используемыми вашим приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...