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

    主站蜘蛛池模板: 国产精品亚洲а∨无码播放不卡| 成人免费无码大片a毛片软件| 亚洲精品色播一区二区| 亚洲AV福利天堂一区二区三 | 亚洲av无码乱码国产精品fc2| 免费看大美女大黄大色| 久草视频在线免费| 一个人免费视频观看在线www| 亚洲av色香蕉一区二区三区| 亚洲人成高清在线播放| 五月天网站亚洲小说| 亚洲线精品一区二区三区影音先锋| 国产男女猛烈无遮挡免费网站| 免费H网站在线观看的| 三年片在线观看免费观看大全一| 国产精品无码永久免费888 | 免费人成视频x8x8入口| 免费鲁丝片一级在线观看| 69式国产真人免费视频| 59pao成国产成视频永久免费| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲AV无码国产精品色| 亚洲国产高清美女在线观看| 色播亚洲视频在线观看| 久久精品国产亚洲AV大全| 久久精品九九亚洲精品| 91亚洲国产在人线播放午夜 | 免费看搞黄视频网站| 免费毛片在线看不用播放器| 成人网站免费看黄A站视频| 中文字幕久精品免费视频| 东方aⅴ免费观看久久av| 国产va免费观看| 中文字幕免费在线视频| a级片在线免费看| 最好免费观看高清在线| 69精品免费视频| 日韩版码免费福利视频| 成年女人午夜毛片免费视频| 免费无码一区二区三区蜜桃大| 永久黄网站色视频免费观看|