精简JRE第二步 ─ 精简lib目录
http://jarg.iteye.com/blog/867960
JRE(Java Runtime Environment): Java運行環境.
打開JRE安裝目錄.目錄包括bin,lib二個文件夾.
1. bin: 可以認為這是Java虛擬機.
精簡過程在本博客文章精簡JRE第一步 ─ 精簡bin目錄 中有初步介紹.
2. lib: 執行class文件時,Java虛擬機需要用到的類庫及資源文件.
① lib目錄最主要的類庫是rt.jar,是任意Java程序所必需的類庫.
lib目錄大約62MB,但是rt.jar類庫就占了47MB,可見精簡bin目錄,最主要是裁剪rt.jar.
② lib目錄下一個運行Java程序不可或缺的文件是位于i386下的虛擬機配置文件jvm.cfg.該配置文件用來管理不同版本的jvm.dll.其內容作為java.exe,javac.exe的全局變量,用來加載相應的動態鏈接庫文件.
③ lib目錄里面除了包含程序運行所需要的類庫及配置文件外,還包含有一些諸如: 鼠標光標,字體等系統資源.簡單程序如果未用到這部分資源的話,可以剔除.
如果程序除去JRE部分,占用空間較大的話,為了避除資源加載錯誤帶來的麻煩,建議保留這不到20MB的內容.
本文主要介紹類庫的精簡過程,主要是rt.jar類庫的精簡過程.
一、準備工作
查看執行當前Java程序所需加載的所有類(由于Java中具有類延時加載的現象,所以要把程序所有的功能都運行一次才能得到運行當前Java程序需要用到的全部類),并保存所有用到的類名到log.txt中.
查看程序加載類的方法在本博客文章精簡JRE - verbose命令 中有初步介紹.
二、修改log.txt
由于log.txt每行都是形同: [Loaded java.lang.System from shared objects file]的一串字符,修改文本以方便獲取類完整名java.lang.System,從而獲得類似類路徑java/lang/System的一串字符,方便后繼編寫類拷貝程序.
修改方法:
1. 查找并替換[Loaded 為空,達到刪除[Loaded 的目的.
2. 使用任意一個具有正則表達式查找替換功能的文本編輯器,查找并替換 from.*為空,達到刪除 from及其后面的字符串的目的.
3. 查找并替換.為/
4. 刪除以[Opened 開頭的行.
5. 刪除程序中System.out.println的輸出行.
java/lang/Object java/io/Serializable java/lang/Comparable ... java/util/TreeMap$Entry sun/misc/VM sun/nio/cs/ext/GBK java/lang/StringCoding java/lang/ThreadLocal$ThreadLocalMap ... java/security/ProtectionDomain$Key java/security/Principal java/lang/Shutdown java/lang/Shutdown$Lock
三、類拷貝程序
上述形同java/lang/System的字符串,System是類名,相應System.class文件.java/lang為System.class在類庫rt.jar中的相對路徑.下面的類拷貝程序的目的就是從解壓后的rt.jar的文件夾rt中將需要用到的類(也就是log.txt中記載的類)拷貝到別一個文件夾(這里為rt1)中,達到抽取運行當前Java程序需要全部類的目的.
程序運行要求: 事先解壓rt.jar類庫到該類拷貝程序所在目錄
四、精簡rt.jar
將拷貝出來的類打包成rt.jar.
1. 用jar打包命令打包.
2. 用壓縮程序(如: winrar)壓縮成rt.zip(不能是.rar格式),然后重命令為rt.jar.
五、精簡charsets.jar
charsets.jar包含執行程序所需的編碼方式,但是通常我們只會用到其中的一種.根據類拷貝程序提示的錯誤信息,將相應的類拷貝出來打包成charsets.jar,完成精簡charsets.jar的工作.
?
至此完成本文要介紹的內容: 精簡lib目錄.
- 大小: 35.8 KB
- 大小: 6.8 KB
- log.rar (2.2 KB)
- 下載次數: 22
?
總結
以上是生活随笔為你收集整理的精简JRE第二步 ─ 精简lib目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精简JRE第一步 — 精简bin目录
- 下一篇: Keil C51软件的使用教程