📜  金联 | Java链接器

📅  最后修改于: 2021-10-19 05:36:07             🧑  作者: Mango

一句话,我们可以说Jlink用于创建我们自己定制的小型JRE(Java RunTime Environment)。
JLink 是 Java 的新命令行工具(在 JDK_HOME/bin 中可用),它允许我们仅链接所需模块(及其依赖项)的集合以创建运行时环境(我们自己的 JRE)。通常,我们使用 Oracle 公司提供的默认 JRE 来运行我们的程序,但是如果我们想要像 geeks jre 这样的自己的 JRE,那么我们可以选择 JLINK。

现在,创建我们自己定制的 JRE 有什么需要?

假设您编写了一个小程序来将两个数字相加。现在它是一个非常基本的Java程序。我们可以使用默认的 JRE 运行我们的程序。

public class Practice {
    public static void main(String[] args)
    {
        System.out.println(10 + 5);
    }
}

为了运行这个程序,它将使用一个 Practice.class 文件、一个 String.class 文件、一个 System.class 文件和一个 Object.class 文件(因为Java中的每个类都是 Object 类的子类)。所以我们将需要三到四个类来运行这个程序。

我们可以使用默认的 JRE 轻松运行该程序,但 Oracle 公司提供的 JRE 包含 4300 多个预定义的 .class 文件。当我们运行这个程序并且我们使用默认的 JRE 时,我们需要在我们的机器上维护所有 4300 多个类,因此浪费了内存(JRE9 的大小是 204mb)。要运行 4kb 程序,维护 204mb 大小的 JRE 有什么用。因此,在客户端机器上浪费了大量内存。因此,定制的 JRE 最好在客户端机器上只包含这四个类。当您在程序中使用特定数量的类时,定制的 JRE 是最好的。

所以,定制 JRE 的最大用途或优势是我们可以只使用所需的模块来创建一个小的 JRE。因此,Jlink 的主要目的是避免运输所有东西,并且在内存很小的非常小的设备上运行。
JLink 还有一个插件列表,可以帮助优化我们的解决方案。

句法:

基于模块的应用程序的结构:

使用基于模块的应用程序的 JLink 示例:

module-info.java
module demoModule
{
    // keeping it empty
}


Practice.java
package packTest public class Practice {
    public static void main(String[] args)
    {
        System.out.println("JLINK DEMO");
    }
}


编译基于模块的应用程序:

javac --module-source-path src -d com -m -demoModule

现在要运行这个程序,我们只需要两个模块,一个是 demoModule,另一个是Java.base 模块(包含 String 类、Object 类和 System 类)。使用这两个模块,我们可以创建我们自己定制的 JRE。所以在 src 目录中添加Java.base 模块。

现在我们可以使用以下 JLink 命令创建我们自己的 JRE:

jlink --module-path src --add-modules demoModule, java.base --output demojre

现在我们自己的 jre 已经创建好了。现在转到您创建的 jre bin 文件夹,如 demmojre/bin
现在运行:- Java -m demoModule/packTest.Practice

输出:

JLINK DEMO

要知道我们自己定制的 jre 的大小,我们可以检查它的属性。

有许多可用于 JLink 的插件。他们之中有一些是: –

  • 排除文件
  • 名誉权
  • 包含语言环境
  • 虚拟机
  • 系统模块
  • 还有很多………..