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目录占用情况如下,供大家参考:
作者:京东科技 周波
来源:京东云开发者社区 转载请注明来源
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
逻辑漏洞挖掘之CSRF漏洞原理分析及实战演练 | 京东物流技术团队
一、前言 2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟,数据安全的重要性愈加凸显,这也更加坚定了我们推行安全测试常态化的决心。随着测试组安全测试常态化的推进,有更多的同事对逻辑漏洞产生了兴趣,本系列文章旨在揭秘逻辑漏洞的范围、原理及预防措施,逐步提升大家的安全意识。第二篇选取了广为熟知的CSRF漏洞进行介绍。 二、CSRF漏洞介绍 1、CSRF漏洞的定义 跨站请求伪造(Cross-site request forgery,简称CSRF),攻击者利用受害者身份发起了HTTP请求,导致受害者在不知情的情况下进行了业务操作,如修改资料、提交订单、发布留言或评论等 2、CSRF主要攻击形式 ① GET类型的CSRF 这类攻击非常简单,只需要一个HTTP请求:<img src=””> ② POST类型的CSRF 这种类型的 CSRF 利用起来通常使用的是一个自动提交的表单,访问问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。可见这种类型的 CSRF 与第一种一样,都是模拟请求,所以后端接口也不能将安全寄托在仅允许 POST 请求上。 ③ 链接类型的...
- 下一篇
为什么idea建议使用“+”拼接字符串 | 京东云技术团队
前言 各位小伙伴在字符串拼接时应该都见过下面这种提示: 内容翻译:报告StringBuffer、StringBuilder或StringJoiner的任何用法,这些用法可以用单个java.lang.String串联来替换。使用字符串串联可以使代码更短、更简单。只有当得到的串联至少与原始代码一样高效或更高效时,此检查才会报告。 大家普遍认知中,字符串拼接要使用StringBuilder,那为什么idea会建议你是用“+”呢,那到底StringBuilder 和 “+”有什么具体区别呢,我们一起来探究一下。 1、普通的几个字符串拼接成一个字符串,直接使用“+” 因为教材等原因,当前依旧有许多人拼接字符串时认为使用“+”耗性能1,首选StringBuilder。 实际上,从JDK5开始,Java编译器就做了优化,使用“+”拼接字符串,编译器编译后实际就自动优化为使用StringBuilder。 新建测试类StringTest,分别创建使用“+”拼接字符串和使用StringBuilder拼接字符串的方法;并新增Junit测试用例,分别调用拼接字符串100000次(这里不是循环拼接,而是执行...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16