JlinkでPLCnext Control上のJava 9アプリを最適化
Java 9では、jlinkという新しいツールが導入されました。これはモジュールを組み合わせてオールインワンのランタイムイメージを構築するものです。一方で、32ビットARM版JDK全体をPLCnext Controlで実行することも可能ですが、jlinkとモジュールを使用すると、Javaアプリケーションに必要なリソースを削減できます。アプリケーションに必要なJDKの部分だけを含むバンドルを作成します。
前提条件
- ホストシステム用JDK
- コントローラ用JDK
OpenJDKのバイナリは多くのプラットフォームでAdoptOpenJDKなどから入手可能です。このチュートリアルでは、コントローラ用にLinux arm32 jdk-12.0.2+10、Windows x64ホストシステム用にその対応版を選択しました。以下の場所にJDKを配置しています:
C: ---Java
| +---jdk-12.0.2
| ...
| ---jdk-12-ARM-32bit
...
アプリケーションモジュールの作成
この例では、コンソールにHello Worldを出力するだけの小さなアプリケーションです。jlinkを使用するには、このアプリケーションをモジュールにする必要があります。出発点は「HelloWorld」というフォルダと、以下の構造を持つsrcフォルダです。
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 { }
ソースフォルダ作成後、プロジェクトをコンパイルします。ターミナルで以下のコマンドを使用:
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フォルダとJavaクラスが作成されます:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
---de
---plcnext
---hello
HelloWorld.class
ホストシステムでモジュールをテストするには、以下のコマンドで実行:
C:\Java\jdk-12.0.2\bin\java.exe --module-path .\modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
これによりHello PLCnext world!が出力されるはずです。
jlinkの使い方
今度は300MBのJDK全体なしでデバイスにデプロイします。最初のステップでは追加パラメータなしでjlinkを使用します。まず、どの追加モジュールが必要かを知る必要があります。これはjdepsでモジュールを分析して調べます。
C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".\modules" --add-modules "de.plcnext.hello"
これにより、java.baseが追加で必要であることがわかります。module-pathには、アプリケーションへのパスとターゲットプラットフォームJDKのjmodsへのパスを指定します。ここでは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
結果として、約45MBのHelloWorldjreフォルダが生成されます。これをコントローラにコピーします。この例では/opt/plcnext/projects/java/に配置。chmod +x javaでHelloWorldjreのbinフォルダ内の「java」ファイルを実行可能にし、モジュールを起動:
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
アプリケーションが実行され、以前と同じくHello PLCnext world!が出力されます。jlinkの追加パラメータ--strip-debug、--no-header-files、--no-man-pages、--compress=2を使用すると、さらに小さく(この例では28MBまで)できます。圧縮が最も効果的ですが、最終的にはパフォーマンスに影響する可能性があります。
産業技術
- 制御回路:基礎、応用、ベストプラクティス
- モダン産業におけるリモート生産制御の5つの主要メリット
- SNMPでPLCnext Controlデバイスを最適化:実践ガイド
- C#でPLCnextコンソールアプリケーションを開発:初心者ガイド
- PLCnextでのクラスタ管理:産業オートメーションにおけるKubernetesの活用
- JlinkでPLCnext Control上のJava 9アプリを最適化
- Java演算子をマスター:種類、構文、実践例
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Java 10のアプリケーションクラスデータ共有(AppCDS)で起動高速化