日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

精简JRE第二步 ─ 精简lib目录

發(fā)布時(shí)間:2024/1/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精简JRE第二步 ─ 精简lib目录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://jarg.iteye.com/blog/867960

JRE(Java Runtime Environment): Java運(yùn)行環(huán)境.
打開JRE安裝目錄.目錄包括bin,lib二個(gè)文件夾.
1. bin: 可以認(rèn)為這是Java虛擬機(jī).
精簡(jiǎn)過(guò)程在
本博客文章精簡(jiǎn)JRE第一步 ─ 精簡(jiǎn)bin目錄 中有初步介紹.

2. lib: 執(zhí)行class文件時(shí),Java虛擬機(jī)需要用到的類庫(kù)及資源文件.

① lib目錄最主要的類庫(kù)是rt.jar,是任意Java程序所必需的類庫(kù).
lib目錄大約62MB,但是rt.jar類庫(kù)就占了47MB,可見精簡(jiǎn)bin目錄,最主要是裁剪rt.jar.

② lib目錄下一個(gè)運(yùn)行Java程序不可或缺的文件是位于i386下的虛擬機(jī)配置文件jvm.cfg.該配置文件用來(lái)管理不同版本的jvm.dll.其內(nèi)容作為java.exe,javac.exe的全局變量,用來(lái)加載相應(yīng)的動(dòng)態(tài)鏈接庫(kù)文件.

③ lib目錄里面除了包含程序運(yùn)行所需要的類庫(kù)及配置文件外,還包含有一些諸如: 鼠標(biāo)光標(biāo),字體等系統(tǒng)資源.簡(jiǎn)單程序如果未用到這部分資源的話,可以剔除.
如果程序除去JRE部分,占用空間較大的話,為了避除資源加載錯(cuò)誤帶來(lái)的麻煩,建議保留這不到20MB的內(nèi)容.

本文主要介紹類庫(kù)的精簡(jiǎn)過(guò)程,主要是rt.jar類庫(kù)的精簡(jiǎn)過(guò)程.

一、準(zhǔn)備工作
查看執(zhí)行當(dāng)前Java程序所需加載的所有類(由于Java中具有類延時(shí)加載的現(xiàn)象,所以要把程序所有的功能都運(yùn)行一次才能得到運(yùn)行當(dāng)前Java程序需要用到的全部類),并保存所有用到的類名到log.txt中.
查看程序加載類的方法在
本博客文章精簡(jiǎn)JRE - verbose命令 中有初步介紹.

二、修改log.txt
由于log.txt每行都是形同: [Loaded java.lang.System from shared objects file]的一串字符,修改文本以方便獲取類完整名java.lang.System,從而獲得類似類路徑j(luò)ava/lang/System的一串字符,方便后繼編寫類拷貝程序.
修改方法:
1. 查找并替換[Loaded 為空,達(dá)到刪除[Loaded 的目的.
2. 使用任意一個(gè)具有正則表達(dá)式查找替換功能的文本編輯器,查找并替換 from.*為空,達(dá)到刪除 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是類名,相應(yīng)System.class文件.java/lang為System.class在類庫(kù)rt.jar中的相對(duì)路徑.下面的類拷貝程序的目的就是從解壓后的rt.jar的文件夾rt中將需要用到的類(也就是log.txt中記載的類)拷貝到別一個(gè)文件夾(這里為rt1)中,達(dá)到抽取運(yùn)行當(dāng)前Java程序需要全部類的目的.

import java.io.*;public class CopyClass {public String src = "rt"; // 類源目錄public String dest = "rt1"; // 類拷貝目的目錄public CopyClass(){readAndCopy("log.txt");}public static void main(String[] args){CopyClass obj = new CopyClass();}/* 讀取log.txt中內(nèi)容,并拷貝相應(yīng)類 */public void readAndCopy(String logName){int count = 0; // 用于記錄成功拷貝的類數(shù)try{FileInputStream fi = new FileInputStream(logName);InputStreamReader ir = new InputStreamReader(fi);BufferedReader br = new BufferedReader(ir);String string = br.readLine();while(string != null){if(copyClass(string) == true)count++;elseSystem.out.println("ERROR " + count + ": " + string);string = br.readLine();}}catch (IOException e){System.out.println("ERROR: " + e);}System.out.println("count: " + count);}/* 從rt中拷貝出class文件 */public boolean copyClass(String string) throws IOException{String classDir = string.substring(0,string.lastIndexOf("/"));String className = string.substring(string.lastIndexOf("/")+1,string.length()) + ".class";/* class文件不存在,返回false */File srcFile = new File(src + "/" + classDir + "/" + className);if(!srcFile.exists()){return false;}byte buf[] = new byte[256];FileInputStream fin = new FileInputStream(srcFile);/* class目錄不存在,創(chuàng)建 */File destDir = new File(dest + "/" + classDir);if(!destDir.exists())destDir.mkdirs();File destFile = new File(destDir + "/" + className);FileOutputStream fout = new FileOutputStream(destFile);int len = 0;while((len = fin.read(buf)) != -1){fout.write(buf,0,len);}fout.flush();return true;} }

程序運(yùn)行要求: 事先解壓rt.jar類庫(kù)到該類拷貝程序所在目錄

四、精簡(jiǎn)rt.jar
將拷貝出來(lái)的類打包成rt.jar.
1. 用jar打包命令打包.
2. 用壓縮程序(如: winrar)壓縮成rt.zip(不能是.rar格式),然后重命令為rt.jar.

五、精簡(jiǎn)charsets.jar
charsets.jar包含執(zhí)行程序所需的編碼方式,但是通常我們只會(huì)用到其中的一種.根據(jù)類拷貝程序提示的錯(cuò)誤信息,將相應(yīng)的類拷貝出來(lái)打包成charsets.jar,完成精簡(jiǎn)charsets.jar的工作.

?

至此完成本文要介紹的內(nèi)容: 精簡(jiǎn)lib目錄.

  • 大小: 35.8 KB
  • 大小: 6.8 KB
  • log.rar (2.2 KB)
  • 下載次數(shù): 22

?

總結(jié)

以上是生活随笔為你收集整理的精简JRE第二步 ─ 精简lib目录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。