写点什么

Java 模块化应用实践之精简 JRE | 京东云技术团队

  • 2023-10-31
    北京
  • 本文字数:926 字

    阅读完需:约 3 分钟

Java模块化应用实践之精简JRE | 京东云技术团队

导语

Java9 及以后的版本引入了模块化特性,但是直到今天 JDK21 都发布了,依然没有被大量使用起来,那么这个特性就真的没啥意义了吗?


别忘了,Java 本身可是把模块化做到了极致的,所以可以利用这个特性对 JRE 本身进行定制化或者精简化。


由于平时偶尔会开发一些 Java 的客户端应用,这时精简 JRE 的需求就凸显出来,让自己的程序带着最精简的 JRE 到处运行。


实际实践了一段时间之后发现“真香!”


现在把“利用 Java 模块化精简 JRE”的方法和经验分享给大家。

案例项目

这是我的一个个人开源项目:MooInfo


项目地址:https://github.com/rememberber/MooInfo


项目结构如下:


一、找出项目依赖的模块

1、maven 编译,打包项目,打包依赖 jar 到 libs

2、使用新版 JDK 自带的 jdeps 找出依赖的模块

上命令:


C:\Users\zhoubo9\.jdks\corretto-17.0.8.1\bin\jdeps -q --multi-release 17 --ignore-missing-deps --print-module-deps D:\IdeaProjects\MooInfo\target\MooInfo\libs\*.jar D:\IdeaProjects\MooInfo\target\MooInfo-1.1.3-runnable.jar


执行结果:



可以看出把项目依赖的模块打印了出来:


java.base,java.desktop,java.instrument,java.management,java.naming,java.prefs,java.rmi,java.scripting,java.sql,jdk.compiler,jdk.httpserver,jdk.unsupported

二、使用新版 JDK 自带的 jlink 制作自定义 JRE

上命令:


C:\Users\zhoubo9\.jdks\corretto-17.0.8.1\bin\jlink --module-path C:\Users\zhoubo9\.jdks\corretto-17.0.8.1\jmods --add-modules java.base,java.desktop,java.instrument,java.management,java.naming,java.prefs,java.rmi,java.scripting,java.sql,jdk.compiler,jdk.httpserver,jdk.unsupported,jdk.crypto.ec --output D:\IdeaProjects\MooInfo\target\MooInfo\jre --no-header-files --no-man-pages --strip-debug --compress=2


执行结果:



精简 JRE 就制作完成啦!


三、精简前后对比

精简前


精简后



由于本项目是桌面客户端项目,使用了占用比较大的 desktop 模块,如果是普通项目精简之后还可以继续缩小 12MB



注:由于 Java 高版本 JDK 没有完整的 JRE 目录,上面精简前的也是在 JDK 目录的基础上精简之后的最小可用版本。


JDK1.8 的 JRE 目录占用情况如下,供大家参考:



作者:京东科技 周波

来源:京东云开发者社区 转载请注明来源

发布于: 刚刚阅读数: 3
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
Java模块化应用实践之精简JRE | 京东云技术团队_Java_京东科技开发者_InfoQ写作社区