一次對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".
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腳本進行自動化拷貝和部署.所以,當我在自己實現這個自動化部署工具的時候才真正感受到大文件拷貝消耗的時間成本.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM