前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次对JDK进行"减肥"的记录

一次对JDK进行"减肥"的记录

作者头像
编程随笔
发布2019-09-11 16:21:45
1.6K0
发布2019-09-11 16:21:45
举报
文章被收录于专栏:后端开发随笔

起因

最近做的一个小项目,因为要涉及到批量部署,每次在部署之前都需要在各个主机上先安装jdk环境(为了使用jdk自带的工具如jps等,所以没有单纯安装jre),但是因为jdk文件太大(以jdk-8u161-linux-x64.tar.gz文件为例,大小为:189.8 MB),每次花费在文件拷贝上的时间都比较多,特别是需要大批量部署的时候总共需要消耗的时间还是比较可观的.因此就突发奇想:是否可以对jdk进行"廋身"呢?毕竟并非JDK中所有的Java类都需要用到,可以将那些不需要的Java类文件以及一些文档性的东西删除掉.于是在google了一下,已经有人这么干过了,参考: https://blog.csdn.net/xuweilinjijis/article/details/77527117 jdk1.8运行环境精简瘦身

我的实践

我根据搜索到的资料,结合自身的实际需求,以满足程序能够正常运行的最低需求,对jdk-8u161-linux-x64.tar.gz进行了相应的精简,最后成功将jdk安装包从"189.8 MB"精简到"49.6 MB".

JDK8精简结果对比
JDK8精简结果对比

如下是对JDK进行精简实践的具体步骤:

删除运行程序并不需要的文档文件及目录

jdk1.8.0_161/javafx-src.zip jdk1.8.0_161/src.zip jdk1.8.0_161/man jdk1.8.0_161/db

上述文件为文档性文件,在运行程序时并不需要,可以直接删除掉.

删除运行程序并不需要的jar包,文件及目录

jdk1.8.0_161/lib/missioncontrol jdk1.8.0_161/lib/visualvm jdk1.8.0_161/lib/ant-javafx.jar jdk1.8.0_161/lib/javafx-mx.jar jdk1.8.0_161/lib/jconsole.jar jdk1.8.0_161/jre/lib/amd64/libawt_xawt.so jdk1.8.0_161/jre/lib/amd64/libjavafx_font_freetype.so jdk1.8.0_161/jre/lib/amd64/libjavafx_font_pango.so jdk1.8.0_161/jre/lib/amd64/libjavafx_font.so jdk1.8.0_161/jre/lib/amd64/libjavafx_font_t2k.so jdk1.8.0_161/jre/lib/amd64/libjavafx_iio.so jdk1.8.0_161/jre/lib/amd64/libjfxwebkit.so jdk1.8.0_161/jre/lib/desktop jdk1.8.0_161/jre/lib/ext/jfxrt.jar jdk1.8.0_161/jre/lib/fonts jdk1.8.0_161/jre/lib/locale/de jdk1.8.0_161/jre/lib/locale/fr jdk1.8.0_161/jre/lib/locale/it jdk1.8.0_161/jre/lib/locale/ja jdk1.8.0_161/jre/lib/locale/ko jdk1.8.0_161/jre/lib/locale/ko.UTF-8 jdk1.8.0_161/jre/lib/locale/pt_BR jdk1.8.0_161/jre/lib/locale/sv jdk1.8.0_161/jre/lib/locale/zh_HK.BIG5HK jdk1.8.0_161/jre/lib/locale/zh_TW jdk1.8.0_161/jre/lib/locale/zh_TW.BIG5 jdk1.8.0_161/jre/lib/oblique-fonts jdk1.8.0_161/jre/lib/deploy.jar jdk1.8.0_161/jre/lib/locale/

删除jar包中不需要的Java类包

jdk1.8.0_161/jre/lib/charsets.jar/sun/awt jdk1.8.0_161/jre/lib/resources.jar/javax/swing jdk1.8.0_161/jre/lib/rt.jar/com/sun/awt jdk1.8.0_161/jre/lib/rt.jar/com/sun/java/swing jdk1.8.0_161/jre/lib/rt.jar/com/sun/swing jdk1.8.0_161/jre/lib/rt.jar/java/applet jdk1.8.0_161/jre/lib/rt.jar/java/awt jdk1.8.0_161/jre/lib/rt.jar/javax/swing jdk1.8.0_161/jre/lib/rt.jar/sun/applet jdk1.8.0_161/jre/lib/rt.jar/sun/awt jdk1.8.0_161/jre/lib/rt.jar/sun/java2d jdk1.8.0_161/jre/lib/rt.jar/sun/swing

总结

这个JDK精简的实现并不涉及任何技术难点,也并非必要.在我自己的实际场景中是因为触及到需要大量拷贝JDK文件导致消耗时间太长这个痛点了,所以才考虑这么做.另外,虽然我需要对程序进行批量部署,但是由于程序很简单,并未使用比较复杂的自动化部署工具,如:Ansible,Puppet等等,而是仅仅通过一个shell脚本进行自动化拷贝和部署.所以,当我在自己实现这个自动化部署工具的时候才真正感受到大文件拷贝消耗的时间成本.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
  • 我的实践
    • 删除运行程序并不需要的文档文件及目录
      • 删除运行程序并不需要的jar包,文件及目录
      • 删除jar包中不需要的Java类包
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档