Java 中的Jlink详解

Jlink是Java的新命令行工具,通过它我们可以创建自己的自定义 JRE。
通常,我们使用默认的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模块:
java\jdk-9\jmods

因此,只需复制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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

发布了252 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/105184776
今日推荐