亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

利用 Jlink 优化 PLCnext Control 上的 Java 9+ 应用

Java 9 引入新工具 jlink,可组合模块构建全功能运行时镜像。一方面可在 PLCnext Control 运行完整 32 位 ARM JDK;另一方面结合 jlink 与模块系统,可裁剪出仅含应用所需 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 文件夹与 class 文件:

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 裁剪运行时

不想带上 300 MB 完整 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

生成 HelloWorldjre 文件夹,仅约 45 MB。复制到控制器(如 /opt/plcnext/projects/java/)。赋予 java 可执行权限:chmod +x java,运行模块:

./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld

输出 Hello PLCnext world!。进一步裁剪可加参数 --strip-debug、--no-header-files、--no-man-pages、--compress=2(压缩最省空间但可能影响性能),可压缩至 28 MB。

工业技术

  1. 高级电机控制电路:自锁、停止与延时技术
  2. 控制电路:基础、应用与最佳实践
  3. 现代工业远程生产控制的5大核心优势
  4. 利用 SNMP 优化 PLCnext Control 设备:实用指南
  5. 开发 PLCnext 控制台应用 (C#):初学者指南
  6. PLCnext 集群管理:利用 Kubernetes 赋能工业自动化
  7. 利用 Jlink 优化 PLCnext Control 上的 Java 9+ 应用
  8. 精通 Java 运算符:类型、语法与实战示例
  9. 精通 Java 接口:概念、实现与最佳实践
  10. 精通 Java Try-With-Resources:自动资源管理详解
  11. Java 注解详解:类型、放置位置与实战示例
  12. Java 10 应用类数据共享 (AppCDS):加速启动与减少内存占用