常日,我们利用默认的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的资料与口试题,如果你在技能上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系办法,有韶光记得帮我点下转发让跟多的人看到哦。










