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

起因
最近做的一个小项目,因为要涉及到批量部署,每次在部署之前都需要在各个主机上先安装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".

如下是对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脚本进行自动化拷贝和部署.所以,当我在自己实现这个自动化部署工具的时候才真正感受到大文件拷贝消耗的时间成本.
一次对JDK进行"减肥"的记录的更多相关文章
- Windows环境下JDK的配置及多版本JDK切换的方法记录
(这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...
- java jdk动态代理学习记录
转载自: https://www.jianshu.com/p/3616c70cb37b JDK自带的动态代理主要是指,实现了InvocationHandler接口的类,会继承一个invoke方法,通过 ...
- ubuntu 下面手动安装jdk
ubuntu 下面手动安装jdk 刚才在ubuntu安装jdk和eclipse,感觉主要安装jdk比较麻烦,记录一下笔记以备后面查看 先在官网上下载jdk的tar包:http://www.oracle ...
- JDK配置环境变量不成功的原因
根据自己配置环境变量遇到的问题进行总结: 1.二次安装需要注意的问题 由于已经安装了一次的原因,此时的注册表已经有了安装记录. 建议删除jdk的记录 首先打开注册表 开始菜单→运行.或者直接键盘按下W ...
- mac下查看jdk安装版本及安装目录
使用IntelliJ idea新建工程时需要查看jdk安装目录,记录下来为以后备用. mac自带jdk,查看jdk版本: IcarusdeMacBook-Pro:~ icarus$ java -ver ...
- Ubuntu 14.10 配置JDK + J2EE
本文仅作为本人在Ubuntu 14.10下安装JDK + J2EE的一个记录: 安装JDK 从Oracle的官网下载jdk-7u75-linux-x64.tar.gz 将jdk-7u75-linux- ...
- 《如何在大学里脱颖而出(How to Win at College)》读书笔记
<如何在大学里脱颖而出(How to Win at College)>读书笔记 图书简介 中文版: 英文版: 作者卡尔·纽波特(Cal Newport)于 2004 年6月以优等生荣誉学会 ...
- 搭建Struts2不同版本jar包不同
struts2的版本比较多,所以在开发的时候特别要注意版本不同所需引入的包是不一样的.否则,会出现各种问题.而且很难找到问题所在. 以下是我遇到的问题总结: 一.当我运用struts2.3.4.1时, ...
- Java 日志管理最佳实践
转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...
随机推荐
- 轻松学习UML之用例图,时序图
本文主要讲解UML图中的用例图(Use Case Diagram)和时序图(Sequence Diagram)相关内容,如有不足之处,还请指正. 概述 统一建模语言(UML,UnifiedModeli ...
- javafx:JavaFX Scene Builder 2.0打开含有第三方jar包的fxml文件报错 Caused by: java.lang.ClassNotFoundException
报错如下: java.io.IOException: javafx.fxml.LoadException: /C:/User.................test.fxml at com.orac ...
- Elasticsearch Kibana查询语法
Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992 Elasticsearch Kibana Discover的搜 ...
- maven项目更换本地仓库
由于电脑重装系统更换原来maven项目的本地仓库 以前的仓库位置如图 需要更换的仓库位置 更换步骤如下: 更换后:
- Linux常用保护机制
Linux程序常见用的一些保护机制 一.NX(Windows中的DEP) NX:No-eXecute.DEP:Data Execute Prevention 也就是数据不可执行,防止因为程序运行出现溢 ...
- Node.js在指定的图片模板上生成二维码图片并附带底部文字说明
在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单: var qr = require('qr-image'); exports.createQRImage = ...
- MyBatis学习日记(一):拜见小主——MyBatis
近日学习MyBatis,特将学习过程及一点心得记录于此. MyBatis为何物? MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC ...
- [认证授权] 1.OAuth2授权
1 OAuth2解决什么问题的? 举个栗子先.小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来.然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写
- C#中的out 参数,ref参数,值参数
大家可能在编码中或多或少的使用过out的ref,但是是否注意过他两的详细用法以及区别? 本文想介绍下详细介绍下out参数,ref参数以及一般值参数. 值参数 在使用参数时,把一个值传递给函数使用的一个 ...
- mycat入门--数据库分片
配置mycat的用户名和密码: 连接mycat,就像连接mysql一样: