設(shè)計(jì)java

          j2ee輕量級框架,IMVC,IORM && web網(wǎng)絡(luò)游戲

          抽取最小的jre--BuildJre項(xiàng)目開啟

              java在桌面軟件的失利,很大程度上取決與她運(yùn)行環(huán)境的陪著復(fù)雜度,還有隨時(shí)帶的一個(gè)龐大的jre環(huán)境。有時(shí)候我們并不需要jre中全部的類庫支持,我們只需要一些對我們項(xiàng)目有用的類庫,能否有一種通用的方法來抽取jre中的這些對我們有用的部分呢?google了下找到了幾篇文章介紹這個(gè)的。主要就是用verbose參數(shù)運(yùn)行jar,然后觀察java載入了多少java類,然后手動(dòng)或者寫個(gè)程序自動(dòng)的吧這些類打包和jvm打包為一個(gè)全新的jre環(huán)境。這種方法是可行的,但是卻是不通用,而且這種方法還有一個(gè)很大的弊端,當(dāng)有些類導(dǎo)入到我們項(xiàng)目中,但是在verbose的時(shí)候沒有用到(比如一些異常類),我們就不會(huì)導(dǎo)入,最終可能在發(fā)布運(yùn)行的時(shí)候就用到了,這樣可不妙。那么是否還有其他方法來瘦身jre環(huán)境呢,然后通過隨身附帶jre發(fā)布java程序?答案一定是有的,我已經(jīng)著手在開發(fā)這個(gè)應(yīng)用,我把她起名為BuildJre。
              一,可行性分析(我們加上在win系統(tǒng)下):
                 java.exe是java運(yùn)行的一個(gè)入口程序,當(dāng)我們鍵入明了 java className的時(shí)候,首先啟動(dòng)都是這個(gè)程序,然后這個(gè)程序回去查找可用的jre庫,一般是先搜索本目錄和父親目錄,如果接著搜索環(huán)境變量,判斷是否為jre的依據(jù)是,首先java.exe查找懷疑目錄(比如父目錄)的bin下有沒有java.dll,如果找到,那么他就判定這個(gè)是jre目錄然后查找lib\i386下的jvm.cfg,最后更具這里面的參數(shù)去啟動(dòng)bin\client或者bin\server下的jvm.dll,這個(gè)才是真正的java虛擬機(jī),到這里,java.exe把控制權(quán)全部交給jvm,然后jvm就初始化,分配內(nèi)存等,運(yùn)行程序了,運(yùn)行程序期間導(dǎo)入的jdk包,都在jre目錄下的lib\rt.jar下。
                 說道這里,我們發(fā)現(xiàn),其實(shí)不用環(huán)境變量,只要有jre環(huán)境就能運(yùn)行java程序,這使得我們更加堅(jiān)定java程序也可以桌面化,因?yàn)樗彩强梢圆挥门渲媚敲绰闊┑沫h(huán)境變量直接運(yùn)行的。再回到瘦身來,剛才說了,jdk中所有的以來包全部位于jre\lib\rt.jar下,我們要廋的就是這個(gè),40多M的rt,我們通過類依賴抽取,對于一個(gè)普通的java程序,預(yù)計(jì)可以廋到小于10M,然后配合java.exe,java.dll,等幾個(gè)小的程序,預(yù)計(jì)目標(biāo)是平均廋身到15M以內(nèi)。

              二,實(shí)施思路,用verbose方法不通用,不能在程序內(nèi)部抽取jre,而且還有可能遺漏依賴項(xiàng),不足提倡。我們架設(shè)有一個(gè)標(biāo)志的依賴說明庫,比如ArrayList這個(gè)類依賴的所有包都一一對應(yīng),那么我們?nèi)绻诔绦蚶飅mport ArrayList的話,那么我們可以迅速抽取相關(guān)的依賴包,然后在整個(gè)項(xiàng)目的所有import中去重復(fù),不就ok了?現(xiàn)在的問題在于:
                    1,不是所有的jdk包都需要import的,比如java.lang下就不用import
                    2,有些jdk內(nèi)部類在同一個(gè)包下不用寫import也一樣依賴。
                    3,計(jì)算jdk內(nèi)部依賴估計(jì)要很長實(shí)踐,因?yàn)槲募芏啵蕾嚭軓?fù)雜。
              這些問題基本上都有解決方法,我已經(jīng)開始著手解決。

              希望有一天,我們的java項(xiàng)目發(fā)布,只要帶上10M的小型環(huán)境,也不用配置環(huán)境變量,雙擊,ok。。哈哈


          --InstantMVC:j2ee輕量級mvc框架

          posted on 2008-08-05 20:59 剎那 閱讀(2038) 評論(2)  編輯  收藏 所屬分類: java

          Feedback

          # re: 抽取最小的jre--BuildJre項(xiàng)目開啟 2008-08-06 09:33 QQ1895

          8CUO,期待能早日用上!  回復(fù)  更多評論   

          # re: 抽取最小的jre--BuildJre項(xiàng)目開啟[未登錄] 2009-05-07 18:08 javaLover

          完全支持樓主想法,爭取樓主早日實(shí)現(xiàn)。實(shí)現(xiàn)了,發(fā)給小弟一個(gè)哈。642276106@qq.com  回復(fù)  更多評論   



          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 桐乡市| 大兴区| 维西| 青铜峡市| 瑞安市| 静安区| 平利县| 苍南县| 陈巴尔虎旗| 依兰县| 西林县| 马鞍山市| 台湾省| 泗洪县| 龙山县| 富顺县| 佛坪县| 扎兰屯市| 桦川县| 辰溪县| 姚安县| 苗栗市| 鸡泽县| 社会| 台湾省| 泽库县| 大新县| 桦甸市| 多伦县| 綦江县| 漳州市| 镇坪县| 郯城县| 临西县| 建水县| 开原市| 宁远县| 平利县| 巨鹿县| 商河县| 临武县|