Java模块化应用实践之精简JRE | 京东云技术团队
最佳答案 问答题库728位专家为你答疑解惑
导语
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目录占用情况如下,供大家参考:
作者:京东科技 周波
来源:京东云开发者社区 转载请注明来源
99%的人还看了
相似问题
- UniApp项目中 使用微信小程序原生语言 进行开发
- 在PyCharm中正确设置Python项目
- 基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】
- 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
- 基于Springboot的美容院管理系统(有报告)。Javaee项目,springboot项目。
- 前后端分离项目跨域请求的问题与解决办法
- 普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会
- 计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战
- Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis
- ssm+vue的药店药品信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
猜你感兴趣
版权申明
本文"Java模块化应用实践之精简JRE | 京东云技术团队":http://eshow365.cn/6-31590-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: UI动效的都可以用哪些工作来制作
- 下一篇: 如何在Vue3项目中使用防抖节流技巧