当前位置: 首页 > news >正文

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

导语

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

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

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

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

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

案例项目

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

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

项目结构如下:
image.png

一、找出项目依赖的模块

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

image.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

可以看出把项目依赖的模块打印了出来:
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就制作完成啦!
image.png

三、精简前后对比

精简前

image.png
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

精简后

image.png

image.png

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

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

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

作者:京东科技 周波

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

相关文章:

  • 刷题笔记day08-字符串01
  • 高阶导数与微积分
  • 【python练习】输出字符串的出现次数最多的前三字符,未通过检测
  • 042-第三代软件开发-485通信
  • ubuntu(18.04)中架设HiGlass docker镜像服务,已尝试mcool、bedpe、wig格式文件
  • 最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程
  • 爬虫之爬虫介绍、requests模块、携带请求参数、url 编码和解码、携带请求头
  • elementUI树节点全选,反选,半选状态
  • 设计模式之观察者模式
  • oracle (9)Storage Relationship Strut
  • 【Linux】虚拟机部署与发布J2EE项目(Linux版本)
  • 解锁AI语言模型的秘密武器 - 提示工程
  • 知心早安问候语,愿你享受美好的时光,幸福快乐每一天
  • 计算机网络第4章-网络层(1)
  • 用逻辑分析仪观察串口Uart数据波形
  • 如何将你的PC电脑数据迁移到Mac电脑?使用“迁移助理”从 PC 传输到 Mac的具体操作教程
  • 在Java和PostgreSQL枚举之间进行转换的通用方法
  • WIN11如何固定文件夹查看方式
  • Java修仙传之神奇的ES(基础使用)
  • Hive常用DDL操作
  • 整形医院网站建设/网店推广方案策划书
  • 网站建设市场前景如何/如何创建自己的域名
  • c2c代表网站是什么/企业软文代写
  • 青岛 外语网站建设/seo优化官网
  • 个人如何做网站推广/网站优化排名哪家好
  • 做网站哪个简单点/最近国内新闻