Оптимизация Java 9 приложений на PLCnext Control с помощью jlink
В Java 9 появился инструмент jlink, объединяющий модули в самодостаточный runtime-образ. Можно запустить полный 32-битный ARM JDK на PLCnext, но с jlink и модулями можно сократить ресурсы: создаётся бандл только с нужными частями JDK.
Предварительные требования
- JDK для хост-системы
- JDK для контроллера (ARM32)
Бинарники OpenJDK на AdoptOpenJDK. Используем Linux arm32 jdk-12.0.2+10 для контроллера и аналогичный для Windows x64 хоста. Расположение:
C: ---Java
| +---jdk-12.0.2
| ...
| ---jdk-12-ARM-32bit
...
Создание модуля приложения
Пример — вывод "Hello World". Для jlink нужен модуль. Структура папки HelloWorld:
HelloWorld
---src
---de.plcnext.hello
| module-info.java
| ---de
---plcnext
---hello
HelloWorld.java
Код HelloWorld.java:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
module-info.java:
module de.pxc.hello { }
Компиляция (из папки HelloWorld):
C:\Java\jdk-12.0.2\bin\javac.exe -d .\modules\de.plcnext.hello .\src\de.plcnext.hello\de\plcnext\hello\HelloWorld.java .\src\de.plcnext.hello\module-info.java
Создаётся папка modules с классами.
Тест на хосте:
C:\Java\jdk-12.0.2\bin\java.exe --module-path .\modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Вывод: Hello PLCnext world!.
Использование jlink
Перенесём на устройство без полного 300 МБ JDK. Сначала узнаем нужные модули через jdeps:
C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".\modules" --add-modules "de.plcnext.hello"
Нужен java.base дополнительно к нашему модулю. module-path — путь к нашему приложению и к jmods целевого JDK (C:\Java\jdk-12-ARM-32bit\jmods).
Вызов jlink:
C:\Java\jdk-12.0.2\bin\jlink.exe --module-path ".\modules;C:\Java\jdk-12-ARM-32bit\jmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
Результат — папка HelloWorldjre ~45 МБ. Копируем на контроллер (например, /opt/plcnext/projects/java/). Делаем java исполняемым: chmod +x java. Запуск:
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Вывод как раньше. Дополнительные параметры jlink уменьшают размер до 28 МБ: --strip-debug, --no-header-files, --no-man-pages, --compress=2 (сжатие экономит больше всего, но может влиять на производительность).
Промышленные технологии
- Управляющие цепи: основы, применение и лучшие практики
- Освоение операторов Java: типы, синтаксис и практические примеры
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Java 10: улучшение производительности через AppCDS (Application Class-Data Sharing)
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности
- Оптимизация PLCnext Control с SNMP: Практическое руководство
- Разработка консольного приложения PLCnext на C#: Руководство для начинающих
- Управление кластерами на PLCnext: Использование Kubernetes для промышленной автоматизации