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

    主站蜘蛛池模板: 日本免费xxxx| a毛片免费观看完整| 亚洲一级免费视频| 亚洲欧洲国产综合| 在线观看特色大片免费视频| 国产成+人+综合+亚洲专| 91情侣在线精品国产免费| 亚洲人成未满十八禁网站| 国产成人免费网站在线观看| 国产成人亚洲毛片| 国产精品亚洲视频| 久艹视频在线免费观看| 亚洲第一精品电影网| 久久精品a一国产成人免费网站| 在线观看日本亚洲一区| 国产免费人成视频在线观看| 一级做a爰片性色毛片免费网站| 亚洲熟妇无码AV在线播放| 99热在线精品免费播放6| 亚洲人成电影网站久久| 免费人妻无码不卡中文字幕18禁| 四虎精品免费永久免费视频| 国产亚洲午夜高清国产拍精品| 99re免费视频| 亚洲精品国产第一综合99久久| 亚洲高清无码在线观看| 无码av免费一区二区三区| 亚洲乱码中文论理电影| 亚洲成AⅤ人影院在线观看| a级毛片免费观看视频| 亚洲人成网站在线观看播放青青| 日本免费人成视频播放| 免费在线黄色电影| 亚洲日本天堂在线| 伊人亚洲综合青草青草久热| 亚洲视频免费观看| 永久免费观看黄网站| 亚洲日本在线免费观看| 亚洲精品一级无码中文字幕| 最近免费中文字幕大全免费版视频 | 国产成人在线观看免费网站|