您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
Java模块化应用实践之精简JRE
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
Java模块化应用实践之精简JRE
yu****
2023-10-30
IP归属:北京
4160浏览
## 导语 Java9及以后的版本引入了模块化特性,但是直到今天JDK21都发布了,依然没有被大量使用起来,那么这个特性就真的没啥意义了吗? 别忘了,Java本身可是把模块化做到了极致的,所以可以利用这个特性对JRE本身进行定制化或者精简化。 由于平时偶尔会开发一些Java的客户端应用,这时精简JRE的需求就凸显出来,让自己的程序带着最精简的JRE到处运行。 **实际实践了一段时间之后发现“真香!” 现在把“利用Java模块化精简JRE”的方法和经验分享给大家。** ## 案例项目 这是我的一个个人开源项目:MooInfo > 项目地址:https://github.com/rememberber/MooInfo 项目结构如下: ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-15-49yHQBXVqyt22pxkG22.png) ## 一、找出项目依赖的模块 ### 1、maven编译,打包项目,打包依赖jar到libs ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-15-53mGDBQpoLR8aOrKY.png) ### 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 ` 执行结果: ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-15-56TWCHaewSnYuTDol.png) 可以看出把项目依赖的模块打印了出来: 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` 执行结果: ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-00YwgbCJtZglpMZKZ.png) 精简JRE就制作完成啦! ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-03IxXdJMD22OlNmJog.png) ## 三、精简前后对比 ### 精简前 ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-29hiMlCSkacToVqzK.png) ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-31Z3122N22Pks3179420zb.png) ### 精简后 ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-30t0d8Ftix9GeakXZ.png) ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-307ZBNYmFyv9y55In6.png) 由于本项目是桌面客户端项目,使用了占用比较大的desktop模块,如果是普通项目精简之后还可以继续缩小12MB ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-32WRrSk32qkne7AT6X.png) 注:由于Java高版本JDK没有完整的JRE目录,上面精简前的也是在JDK目录的基础上精简之后的最小可用版本。 JDK1.8的JRE目录占用情况如下,供大家参考: ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2023-09-22-16-37qsmPHE0L37xoE8Nt.png)
上一篇:同城售后系统退款业务重构心得
下一篇:jar包的精细化运营,Java模块化简介
yu****
文章数
5
阅读量
674
作者其他文章
01
Java21上手体验-分代ZGC和虚拟线程
一、导语几天前Oracle刚刚发布了Java21,由于这是最新的LTS版本,引起了大家的关注。我也第一时间在个人项目中进行了升级体验。一探究竟,和大家分享。二、Java21更新内容介绍官方release公告:https://jdk.java.net/21/release-notes开源中国介绍:https://my.oschina.net/waylau/blog/10112170新特性一览:JEP
01
【后台体验】运营后台订单详情设计分享
目前大部分运营后台的设计和开发都是由后端同学来做,产品经理对界面标准要求并不高,大多数都是能用就行。其实,只要花些心思,运营后台也可以做的很美,提升运营同学的日常使用体验。下面跟大家分享两个我做的运营后台中的订单详情设计1.共享图书平台运营后台订单详情设计心路历程:产品经理并没有要求如何展示,仅提供想要看的内容,所以自由发挥如图该后台面向对象主要是仓库运营和图书运营人员,核心关注改订单包含哪些书
01
jar包的精细化运营,Java模块化简介
图:模块化手机概念一、什么是Java模块化Java模块化(module)是Java9及以后版本引入的新特性。官方对模块的定义为:一个被命名的,代码和数据的自描述集合。( the module, which is a named, self-describing collection of code and data)。早在Java7的时候就被提出,但由于其复杂性,不断跳票,直到Java9才有,那么
01
Java模块化应用实践之精简JRE
导语Java9及以后的版本引入了模块化特性,但是直到今天JDK21都发布了,依然没有被大量使用起来,那么这个特性就真的没啥意义了吗?别忘了,Java本身可是把模块化做到了极致的,所以可以利用这个特性对JRE本身进行定制化或者精简化。由于平时偶尔会开发一些Java的客户端应用,这时精简JRE的需求就凸显出来,让自己的程序带着最精简的JRE到处运行。实际实践了一段时间之后发现“真香!”现在把“利用Ja
yu****
文章数
5
阅读量
674
作者其他文章
01
Java21上手体验-分代ZGC和虚拟线程
01
【后台体验】运营后台订单详情设计分享
01
jar包的精细化运营,Java模块化简介
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号