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

java9 揭秘 jlink_Java 中的Jlink详解相关推荐

  1. ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route

    前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...

  2. Asp.net中GridView使用详解(引)【转】

    Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...

  3. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  4. ArcGIS Engine中的Symbols详解

    转自原文 ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式 ...

  5. js路由在php上面使用,React中路由使用详解

    这次给大家带来React中路由使用详解,React中路由使用的注意事项有哪些,下面就是实战案例,一起来看一下. 路由 通过 URL 映射到对应的功能实现,React 的路由使用要先引入 react-r ...

  6. Linux中etc目录详解

    Linux中etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc   or/etc/rc.d   or/etc/rc*.d   启动.或改变运行级时运行的sc ...

  7. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  8. numpy中reshape方法详解

    numpy中reshape方法详解_zhanggonglalala的博客-CSDN博客_reshape

  9. JavaScript中getBoundingClientRect()方法详解

    JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...

最新文章

  1. k8s,nginx备份日志脚本
  2. 【pmcaff】12月5日凯文·凯利上海演讲实录
  3. mysql实现类似oracle的序列,mysql 创建[序列],功能类似于oracle的序列
  4. [LeetCode] Remove Duplicates from Sorted List - 链表问题
  5. C和汇编混合编程---do while
  6. php递归操作目录 递归对参数转义
  7. 计算机出现假桌面怎么解决办法,win10系统apphangxprocb1引起桌面假死怎么解决【图文】...
  8. SpannableString与SpannableStringBuilder使用
  9. 并不对劲的bzoj5340:loj2552:uoj399:p4564: [Ctsc2018]假面
  10. OpenCV-实现直方图均衡化(对比cv::equalizeHist)
  11. php黑名单绕过,利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
  12. python项目小案例:一个网页响应超时提醒小闹钟
  13. Atitit 开发2d游戏的技术选型attilax总结
  14. python 公众号开发框架_基于werobot框架的微信公众号开发
  15. 隐形缝针法_裤腰大了怎么改小的隐形针法
  16. Typora任意更改样式
  17. 电路原理 的 一些基础知识
  18. 中间件是什么?通俗易懂的解释
  19. odi12配置mysql_Oracle Data Integrator 12c 安装(ODI安装)
  20. 免费的PDF转换工具,简单高效有它就够了!

热门文章

  1. python按模板生成html_python 利用jinja2模板生成html代码实例
  2. 2020年阴历三月初八 投资理财~如何识别有前景的公司?
  3. VC++  DLL 导出函数
  4. 基于java的旅行社网站设计
  5. 【JavaScript设计模式】-观察者模式 Observe
  6. html中object标签的使用
  7. 468,提莫攻击的两种解决方式
  8. 关于Repeater 嵌套梆定不明之处
  9. Python对带光晕的图像进行去黑底黑色背景操作(附源码)
  10. 哈希函数--区块链的back bone