Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Оптимизация Java 9 приложений на PLCnext Control с помощью jlink

В Java 9 появился инструмент jlink, объединяющий модули в самодостаточный runtime-образ. Можно запустить полный 32-битный ARM JDK на PLCnext, но с jlink и модулями можно сократить ресурсы: создаётся бандл только с нужными частями JDK.

Предварительные требования

Бинарники 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 (сжатие экономит больше всего, но может влиять на производительность).

Промышленные технологии

  1. Управляющие цепи: основы, применение и лучшие практики
  2. Освоение операторов Java: типы, синтаксис и практические примеры
  3. Интерфейсы в Java: концепции, реализация и лучшие практики
  4. Try-with-resources в Java: автоматическое управление ресурсами
  5. Аннотации в Java: типы, размещение и практические примеры
  6. Java 10: улучшение производительности через AppCDS (Application Class-Data Sharing)
  7. 5 ключевых преимуществ удаленного контроля производства для современной промышленности
  8. Оптимизация PLCnext Control с SNMP: Практическое руководство
  9. Разработка консольного приложения PLCnext на C#: Руководство для начинающих
  10. Управление кластерами на PLCnext: Использование Kubernetes для промышленной автоматизации