您的位置 首页 java

Java 中的Jlink详解

Jlink 是Java的新命令行工具,通过它我们可以创建自己的 自定义 JRE

Java 中的Jlink详解

通常,我们使用默认的JRE运行程序,但是如果您要创建自己的JRE,则可以使用jlink概念。

为什么要建立自己的JRE?

让我们来看一个例子。

假设我们有一个简单的“ hello world”程序,例如:

class Test {

public static void main(String[]args) {

System.out.prinltn(“Hello World”);

}

}

如果要在我们的系统上运行此小程序,则需要安装默认的JRE。安装默认的JRE之后,我可以愉快地运行我的小型“ hello world”应用程序。

问题

要执行这个小的“ hello world”应用程序,我们需要以下.class文件:

· 测试类

· 字符串类

· 系统类

· 对象类

在这里,这4个.class足以运行我的应用程序。

Oracle提供的默认JRE包含 4300多个预定义的Java .class文件。

如果我使用默认的JRE执行“ hello world”应用程序,则将执行所有预定义的.class文件。但是,如果我只需要3-4个.class文件来执行“ hello world”应用程序,那么为什么我需要维护外部.class文件?

因此,默认JRE的问题在于,无论您是否愿意,它都会执行所有预定义的.class文件。

并且,如果您还查看默认JRE的大小,则将发现它为203 MB。为了执行简单的1 KB代码,我必须在计算机中维护203 MB的JRE。这完全是浪费内存。

因此,使用默认的JRE意味着:

· 浪费内存并降低性能

· 将无法开发包含很少内存的微服务。=

· 不适合物联网设备

因此,Java不是微服务和IoT设备的最佳选择,但这只是Java 1.8中的一个问题。同时,Java 1.9带有jlink。使用jlink,我们可以创建自己的小型JRE,该JRE包含我们想要的唯一相关类。不会浪费内存,性能将会提高。

Jlink允许我们链接仅所需模块的集合以创建运行时映像(我们自己的JRE)

使用所需模块创建我们的JRE

假设我的“ hello world”程序位于名为DemoModule的模块中。我们可以使用Java 9编译基于模块的应用程序:

javac –module-source-path src -d out -m demoModule

成功编译后,将创建一个包含Test.class文件的文件夹。如果使用默认的JRE运行此基于模块的应用程序,则可以使用以下命令:

java –module-path out -m demoModule/knoldus.Test

但是正如我们讨论的那样,我们的“ hello world”程序仅需要几个.class文件-String.class,System.class和Object.class。这些.class文件是java.lang包的一部分,而java.lang包是java.base模块的一部分。因此,如果我想运行“ hello world”程序,则只需要两个模块-DemoModule和java.base模块。使用这两个模块,我们可以创建自己的自定义JRE来运行该应用程序。

您可以在路径中找到java.base模块:

javajdk-9jmods

因此,只需复制java.base模块并将其粘贴到具有Test.class文件的文件夹中即可。现在,我们可以使用以下命令创建自己的JRE:

jlink –module-path out –add-modules demoModule,java.base –output myjre

成功执行此命令后,您会发现有一个myjre文件夹,除了您自定义的JRE外,什么都没有。只需按照几步使用自定义的JRE执行程序

· cd myjre

· cd bin

· java -m demoModule/knoldus.Test

通过执行这些命令,您可以愉快地运行“ hello world”应用程序。这就是jlink的全部!我希望您现在对如何使用它来制作自己的JRE有一个清晰的了解。

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

Java 中的Jlink详解

文章来源:智云一二三科技

文章标题:Java 中的Jlink详解

文章地址:https://www.zhihuclub.com/176858.shtml

关于作者: 智云科技

热门文章

网站地图