<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相關

    主站蜘蛛池模板: 一区二区亚洲精品精华液| 13一14周岁毛片免费| 成人免费乱码大片A毛片| 国偷自产一区二区免费视频| 日本免费大黄在线观看| 天天影院成人免费观看| 精品久久久久久久免费加勒比| 深夜国产福利99亚洲视频| 亚洲日韩欧洲无码av夜夜摸| 亚洲视频免费在线看| 亚洲欧美日韩一区二区三区| kk4kk免费视频毛片| 18女人腿打开无遮掩免费| 日本成人在线免费观看| 国产亚洲美女精品久久久久狼| 亚洲成人高清在线观看| 人碰人碰人成人免费视频| 99久热只有精品视频免费看| 好吊妞998视频免费观看在线| 国产AⅤ无码专区亚洲AV| 亚洲jjzzjjzz在线播放| 一级免费黄色毛片| 国内精品乱码卡1卡2卡3免费| 国产在线观看免费视频播放器 | 77777亚洲午夜久久多喷| 成在线人视频免费视频| 国产精品成人免费一区二区| 亚洲精品成人无限看| 亚洲av无码专区亚洲av不卡| 午夜精品免费在线观看| 亚洲成av人片天堂网老年人| 亚洲一级高清在线中文字幕| 日本道免费精品一区二区| 国产片免费在线观看| 亚洲一区无码中文字幕乱码| 成全视频免费观看在线看| 中文字幕 亚洲 有码 在线| 全亚洲最新黄色特级网站| 国产成人无码免费视频97| 久久精品国产亚洲77777| 51午夜精品免费视频|