<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    你的HelloWorld有多大(轉載)

    轉自http://nonconductor.bokee.com/5085956.html

    你的HelloWorld有多大

    關鍵詞jdk ?? size ?? ??????????????????????????????????????

    你經常寫一些有趣的小程序么?你想分發你的程序么? 你怎么保證目標機上有jre呢? 你打包一個? 一個jre幾十兆,若是大工程,帶個jdk也無所謂,如果你自己的類文件一共還沒有1兆,就要帶個幾十兆的jre,你能接受么? 如果你想分發你的小程序,那么我們來進行jre瘦身吧! 看看我們的HelloWorld最小能多小。

    jre帶的很多文件可能在你的程序里并不需要,或者你的程序只需要某個幾兆大的jar里面的一個class。所以,理論上我們可以對jre進行減肥運動。把你不需要的jar和文件刪掉,剩下的跟你的程序一起打個包。

    下面以jdk5.0開發的一個HelloWorld為例來簡單做個試驗。

    開發我們的Hello軟件:

    class Hello {
    ?public static void main(String[] args) {
    ??System.out.println("?}
    }

    用java -verbose Hello?執行程序就能看到所有用到的class。當然,如果你的程序比較復雜,中間有條件跳轉的話,一次執行可能并不能將所有的可能用到的class打印出來。這個不是大問題,你可以嘗試別的辦法來找出所有用到的文件。

    1。把這些class找出來。java -verbose Hello>G:/jdkfit/Hello.list

    當然,用Runtime.exec("java -verbose Hell").getInputStream()來獲得輸出結果直接使用更好。

    2。打個包。我們來寫個程序來完成這個任務吧。執行下邊這個Packager 程序。

    3。拷貝一個jre,把我們自己打的jar覆蓋jre的rt.jar,用這個jre執行java Hello。最好做個bat文件(我做了個run.bat)。 試著刪除jre下的文件,看能不能run。直到最后,呵呵,只剩下這么幾個了:

    bin/java

    bin/run.bat

    bin/client/jvm.dll

    lib/rt.jar (我們自己打的那個包)

    lib/i386/jvm.cfg

    共計大小:2.11兆

    再來rar一下:1.123兆

    呵呵 1.1兆的一個小程序包更加容易分發吧。

    package cn.javadoc.jfit;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.jar.JarOutputStream;
    import java.util.zip.ZipEntry;

    public class Packager {

    ?/**
    ? * @param args
    ? */
    ?public static void main(String[] args) throws Exception {
    ??File f = new File("G:/jdkfit/Hello.list");
    ??Packager pkger = new Packager();
    ??List ret = pkger.parseOutput(new FileInputStream(f));
    ??pkger.debugEnabled = true;
    ??pkger.pkgResources(ret, "G:/jdkfit/jar/Hello.jar");

    ?}

    ?private boolean debugEnabled;

    ?public List parseOutput(InputStream in) throws IOException {
    ??ArrayList ret = new ArrayList();
    ??BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    ??String line = reader.readLine();
    ??while (line != null) {
    ???if (line.matches("
    \\[Loaded .* from .*")) {
    ????if (debugEnabled)
    ?????System.out.println("Matches:" + line);
    ????ret.add(line.substring(8, line.indexOf(" from ")));
    ???} else {
    ????if (debugEnabled)
    ?????System.out.println("UnMatches:" + line);
    ???}
    ???line = reader.readLine();
    ??}
    ??return ret;
    ?}

    ?public void pkgResources(List res, String fileName)
    ???throws IOException {
    ??File f = new File(fileName);
    ??if (!f.exists()) {
    ???f.createNewFile();
    ??}
    ??byte[] buf = new byte[1024];
    ??JarOutputStream out = new JarOutputStream(
    ????new FileOutputStream(fileName));
    ??for (String s : res) {
    ???s = s.replace('.', '/') + ".class";
    ???if (debugEnabled) {
    ????System.out.println("adding: " + s);
    ???}
    ???InputStream in = this.getClass().getClassLoader()
    ?????.getResourceAsStream(s);
    ???out.putNextEntry(new ZipEntry(s));
    ???int w = in.read(buf);
    ???while (w >= 0) {
    ????out.write(buf, 0, w);
    ????w = in.read(buf);
    ???}
    ???in.close();
    ??}
    ??out.finish();
    ??out.close();
    ?}
    }

    posted on 2006-11-06 11:34 dreamstone 閱讀(525) 評論(0)  編輯  收藏 所屬分類: jdk相關

    主站蜘蛛池模板: 日韩一品在线播放视频一品免费| 很黄很黄的网站免费的| 国产精品V亚洲精品V日韩精品 | 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲av伊人久久综合密臀性色| a级大片免费观看| 久久精品亚洲中文字幕无码网站 | 最近中文字幕mv免费高清视频7| 亚洲中文无码线在线观看| avtt亚洲天堂| 乱人伦中文视频在线观看免费| 一级一级一片免费高清| 中文字幕精品无码亚洲字| 国产午夜精品理论片免费观看| 亚洲国产a∨无码中文777| 久久久久免费看成人影片| 亚洲不卡1卡2卡三卡2021麻豆| 久久精品免费一区二区喷潮| 亚洲变态另类一区二区三区 | WWW国产成人免费观看视频| 国产成人A人亚洲精品无码| 久久精品电影免费动漫| 亚洲伊人久久大香线蕉在观| 永久免费AV无码网站在线观看| 鲁啊鲁在线视频免费播放| 亚洲精品无码永久在线观看你懂的 | 农村寡妇一级毛片免费看视频| 亚洲人成无码网站| 国产精品69白浆在线观看免费| 亚洲av之男人的天堂网站| 日本免费xxxx| 亚洲一区二区中文| 毛片免费全部免费观看| 永久免费精品影视网站| 中文字幕在线观看亚洲| 波多野结衣久久高清免费 | 黄桃AV无码免费一区二区三区| 久久夜色精品国产噜噜噜亚洲AV| 无码视频免费一区二三区| 一区二区三区视频免费观看| 久久久亚洲精品国产|