欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JRE極限精簡(jiǎn)探求手冊[1]——精簡(jiǎn)一個(gè)Swing的即時(shí)戰略游戲 - 【Java究竟怎么玩...

JRE極限精簡(jiǎn)探求手冊[1]——精簡(jiǎn)一個(gè)Swing的即時(shí)戰略游戲 收藏
本例中以GreenJVM直接壓縮精簡(jiǎn)后綠色版游戲下載地址:http://download.csdn.net/source/612943


本回主在描述精簡(jiǎn)一個(gè)Java應用的實(shí)際步驟,選取了ApoDefence這個(gè)小型的Java即時(shí)戰略游戲作為用例。

該作者信息可以在http://home.arcor.de/newbielein/獲得,這是一個(gè)德文網(wǎng)頁(yè),作者也提供了其它一些小型Java游戲的展示,比如:

 

有興趣的可以下載作為參考。

ApoDefence是一個(gè)Java制作的2D即時(shí)戰略游戲,游戲主題是本國要塞的加固及本國城堡的防護,雖然作者所提供的功能對比商業(yè)化游戲遠不夠完全,但是即時(shí)戰略游戲的基本要素,如小地圖,點(diǎn)選對象,建筑的搭建、修理、破壞、計時(shí),建筑升級,多兵種協(xié)作,敵我互動(dòng)及地圖編輯都已經(jīng)在由此游戲中展現出來(lái),應該這個(gè)程序說(shuō)對于開(kāi)發(fā)Java即時(shí)類(lèi)游戲而言是一個(gè)不錯的參考范例。

ApoDefence主要文件有兩部分,一是ApoDefence.jar本身,一是levels文件夾下的腳本地圖,兩者累計大小為734KB。

應該說(shuō),如果它永遠只有這么大,將他放到同人游戲站點(diǎn)上,下載量是絕不會(huì )輸給其他語(yǔ)言開(kāi)發(fā)的同類(lèi)游戲的。

游戲界面1:

 

游戲界面2:

 


但遺憾的是,這個(gè)游戲是Java開(kāi)發(fā)的,如果沒(méi)有動(dòng)輒數十兆的虛擬機支持,它是很難跑得起來(lái)的。

試問(wèn)你看到這么一個(gè)小游戲,記住,也僅僅是個(gè)小游戲,它似乎很好玩,卻需要下載十幾甚至幾十兆的安裝程序,你還會(huì )有興趣去嘗試嗎?我相信大多數人的答案會(huì )是否定的,所以,我開(kāi)始試著(zhù)精簡(jiǎn)它。

第一步:整理你的RT.JAR文件

我們都知道,JRE的完整版體積是很大的,在其文件夾內充斥著(zhù)無(wú)數的dll,jar及properties配置文件,但要說(shuō)到其中那個(gè)文件最大,最占用空間,則首推rt.jar文件莫屬。

以JRE1.6中的rt.jar為例,僅它一個(gè)jar,便占用了將近46MB的硬盤(pán)空間,這無(wú)疑是種壟斷,嚴重擠壓了其它jar同類(lèi)的生存空間~~~

 

前兩天我在Blog發(fā)過(guò)一篇文章,講的就是這件事(精簡(jiǎn)jre體積),我提供了一個(gè)名為GreenJVMMake.jar的6KB小程序,它能夠準確的記錄每次啟動(dòng)Java程序所調用類(lèi)與rt.jar中類(lèi)的對應關(guān)系,并且在程序執行結束后生成一個(gè)僅攜帶調用類(lèi)的rt.jar。

那么,我們要開(kāi)始精簡(jiǎn)rt.jar了。

首先,我們制作一個(gè)簡(jiǎn)單的bat批處理文件,內容如下:java -jar GreenJVMMake.jar -t da -i ./ApoDefence.jar -o ./

為的是調用ApoDefence.jar圖形程序,并將精簡(jiǎn)后的rt.jar在本地輸出。

我們可以看到,隨著(zhù)我們的操作,所有被調用過(guò)的類(lèi)都被記錄下來(lái)了,事實(shí)上由于組件大多數都會(huì )重用的關(guān)系,只要運行幾個(gè)典型界面,就可以把整個(gè)程序使用到的class全部打包進(jìn)來(lái)了,而不必一直玩到通關(guān)。

 


現在我們來(lái)看看成果吧,一個(gè)原始大小將近46MB的“怪物”,現在在這個(gè)Swing游戲環(huán)境中,還剩下多少呢?20MB嗎?10MB嗎?不,比那要小得多,答案是僅有不足3.2MB了。

 


這么小的庫能夠跑得起來(lái)這個(gè)Swing游戲嗎?我們可以先在本機試試看。

 

就結果來(lái)看,答案似乎是肯定的,我們精簡(jiǎn)成功了。但事實(shí)果真如此嗎?未必。我們將程序發(fā)布到一臺從未配置過(guò)Java環(huán)境的機器看個(gè)究竟。

PS:本示例使用自制的GreenJVM作為虛擬機引導程序,詳細見(jiàn):http://blog.csdn.net/cping1982/archive/2008/08/21/2806598.aspx

 

我們可以清楚地看到,雖然開(kāi)始啟動(dòng)后已經(jīng)載入了作者的丑陋嘴臉~|||……但GreenJVM卻同時(shí)提示給我們一個(gè)Exception,顯示找不到sun.font.StandardGlyphVector類(lèi),但我們在本地調試得好好的啊,究竟為什么呢?

其實(shí)原因很簡(jiǎn)單,就在于我們的JRE是針對A系統環(huán)境而配置的,而并非B系統。

大家都知道,無(wú)論是JRE或者我們開(kāi)發(fā)Java程序時(shí),為了最大限度發(fā)揮Java跨平臺特性,都會(huì )對不同的系統采取不同操作,從而提高本地環(huán)境下Java執行效率。

但是,當我們利用GreenJVMMake.jar進(jìn)行rt.jar精簡(jiǎn)后,則只會(huì )獲得本機環(huán)境下需要的類(lèi),卻并非所有環(huán)境下都通用的類(lèi),異常產(chǎn)生的原因也在于此。那么我們應該怎么辦呢?

其實(shí)很好解決,第一、由于我們使用的是自帶JRE,決不會(huì )存在版本沖突問(wèn)題,無(wú)論調用方式怎樣,最終的結果,絕對是特定版本產(chǎn)生的,也就是不可能存在針對版本優(yōu)化而缺少類(lèi)庫的顧慮。第二、事實(shí)上能夠針對不同環(huán)境的配置變更并不多,要說(shuō)最常見(jiàn)的,那就是語(yǔ)言與字體。比較典型的就是我們剛才所見(jiàn)的font包異常,這類(lèi)異常大多是由現有 Java字庫對本地環(huán)境的不支持所產(chǎn)生的,那么針對在不同環(huán)境使用的程序,我們在精簡(jiǎn)時(shí)可以刻意的保留下所有font及所有如zh_cn、en等針對不同語(yǔ)言所定制的對應類(lèi)(英文程序則沒(méi)必要保留所有語(yǔ)言支持),這樣雖然程序體積比之前略大些,卻可以從根本上解決問(wèn)題。

現在,我替精簡(jiǎn)的rt.jar重新拷貝所有的font支持類(lèi)(這部分我在GreenJVMMake.jar中添加了完整保留指定庫的功能,由于改動(dòng)太少暫時(shí)沒(méi)有發(fā)布,自己ctrl+c和ctrl+v也不麻煩)。

替換后的精簡(jiǎn)rt.jar大小如圖:

 


第二步:刪減不必要的exe,dll及其它一切配置文件。

這步說(shuō)簡(jiǎn)單也簡(jiǎn)單,說(shuō)麻煩便麻煩,簡(jiǎn)單的是舉凡rt.jar中不調用的,除了jvm.dll(它調用一切),我們盡管刪掉即可;麻煩的是目前為止還沒(méi)有一個(gè)工具提供了這樣的功能(考慮寫(xiě)一個(gè)),現在我們只能依據經(jīng)驗來(lái)判定這些文件是否會(huì )被rt.jar調用了,這部分我準備寫(xiě)再下回時(shí)說(shuō),先賣(mài)個(gè)關(guān)子。但有一點(diǎn)最基礎的大家可以注意一下,那就是通常這些文件名會(huì )有和類(lèi)名互相對應的部分。

第三步:壓縮精簡(jiǎn)后的JRE

這時(shí)有兩類(lèi)方式可供選擇。

一、使用Install4J等工具制作精簡(jiǎn)JRE。

 

我這里建議使用Install4J,這是目前為止對Java軟件支持最全面的安裝包制作工具,我個(gè)人目前所使用的是4.1.4版。

 

我們以Install4J為例,直接通過(guò)選擇[Create a JRE Bundle] ,創(chuàng )建一個(gè)自定義的JRE包。

 
選擇精簡(jiǎn)后的JRE所在路徑,版本,及擴充名(Install4J識別用)。

 

此時(shí)的Install4J對JRE來(lái)說(shuō),會(huì )有兩種不同的壓縮方式,一是針對JRE1.5以下版本的直接壓縮,二是針對JRE1.5以上版本的pack200壓縮jar,再二次壓縮成JRE包。

當我們使用JRE1.5以下版本方式壓縮JRE包時(shí),通常不會(huì )有任何問(wèn)題,因為這時(shí)Install4J只是單純的壓縮一個(gè)gz格式文件。

 

如上圖所示,針對JRE1.5以下版本進(jìn)行JRE壓縮成功,最后生成的文件將位于Install4J目錄下jres文件夾中,本例生成的JRE文件大小約5MB。


 

而當我們以JRE1.5以上版本壓縮JRE時(shí),問(wèn)題就來(lái)了,因為此時(shí)Install4J將調用pack200進(jìn)行jar壓縮。

 

對一個(gè)完整的JRE打包來(lái)說(shuō),擁有pack200相關(guān)功能當然不是問(wèn)題,可在使用精簡(jiǎn)的JRE時(shí),卻變得不一定了。

 

瞧,剛才還能正常運轉的Install4J,此刻卻罷工了。理由很簡(jiǎn)單,我們的精簡(jiǎn)包中沒(méi)有打入pack的類(lèi)支持,是的,運行Install4J的JRE1.5以上版本打包不光需要Pack200.exe文件,同時(shí)需要rt.jar中的類(lèi)庫支持。

沒(méi)辦法,我們制作一個(gè)完整調用pack類(lèi)庫的小程序,而后以此生成僅有依賴(lài)庫的rt.jar,合并打包進(jìn)自定義的rt.jar中,再次運行程序。OK,通過(guò)了。

 

經(jīng)過(guò)Install4J打包的jre1.5以上版本jre能夠壓縮得相當厲害,我們原本將近10MB的文件經(jīng)其壓縮整理后只有2MB多一點(diǎn)。

但是Install4J畢竟是一個(gè)收費軟件,況且現在的環(huán)境下流行綠色軟件,也就是所謂的免安裝無(wú)插件不修改注冊表或其它系統文件的程序……畢竟我們有時(shí)也希望能將Java程序作為一個(gè)綠色軟件進(jìn)行發(fā)布。

二、使用7-Zip等工具制作精簡(jiǎn)JRE。

現在,我們以7z格式制作一個(gè)jre壓縮包。

首先,我們學(xué)習Install4J的方法,先將所有jar進(jìn)行pack200打包,由于pack200是針對jar定制的壓縮程序,所以能最大限度的減小jre中文件體積。

由于本示例使用GreenJVM作為jar引導程序,所以包名后綴命名為[pack200],當GreenJVM初始化時(shí)將自動(dòng)調用unpack200.exe解壓文件所在目錄及子目錄下所有[pack200]后綴的文件。

其實(shí),我們使用壓縮工具對JRE文件夾進(jìn)行壓縮,本例中我們使用7-zip進(jìn)行壓縮。


7-zip是一個(gè)源碼開(kāi)放的基于lzma方式的免費軟件,單就文件壓縮率而言,較rar格式更高,下載地址:http://www.7-zip.org/

 

此后我將將得到一個(gè)jre,現在這個(gè)總體積約5MB的jre包,就是最終可以執行此Swing游戲的環(huán)境了(相較于Install4J壓縮后的JRE包而言,這個(gè)JRE壓縮文件還是大了,利用某些機制還可以壓得更小,下回介紹)。

 


無(wú)論我們采取那種機制,這個(gè)JRE最終發(fā)布版都會(huì )被維持在5MB以?xún)取?/p>


第四步,打包發(fā)布。


1、直接進(jìn)行壓縮打包

這點(diǎn)其實(shí)沒(méi)什么可說(shuō)的,如果你使用GreenJVM制作的綠色Java程序,那么你只需把用到的程序連帶精簡(jiǎn)后的JRE都丟給用戶(hù)就好。雙擊exe文件運行我相信大部分使用過(guò)電腦的人還是明白的……

 

另外有一點(diǎn)需要補充說(shuō)明,就是同種壓縮方式二次壓縮將很難使文件再度縮減,比如本例我們以7z格式打包jre,那么如果針對整個(gè)應用制作再次壓縮文件則選用rar格式更合適。

2、使用Install4J進(jìn)行打包發(fā)布


比較大多數Java開(kāi)發(fā)的程序而言,上面這個(gè)綠色發(fā)布版的體積可說(shuō)是相當小了,已經(jīng)能滿(mǎn)足絕大多數Java游戲的需要(除了沒(méi)聲音,因為原游戲沒(méi)調用),但是對比本地環(huán)境開(kāi)發(fā)的程序來(lái)說(shuō)依舊太大,用戶(hù)并不一定便會(huì )接受,這時(shí)我們?yōu)榱俗屗∫恍?,單純的壓縮已經(jīng)不能派上用場(chǎng),非借助安裝工具的多重壓縮精簡(jiǎn)不可了。

依舊使用Install4J,它的視圖安裝方式極為簡(jiǎn)單,正宗的傻瓜式“下一步”就可以搞定,時(shí)間關(guān)系這里不作詳細說(shuō)明,直接跳到設定媒體文件模式。


由于此示例基于windows系統開(kāi)發(fā),所以?xún)H設定windows平臺支持。

 


經(jīng)過(guò)一系列下一步后,選擇我們制作的JRE,靜態(tài)綁定。

 

最后,我們選擇構建一個(gè)Windows平臺下的安裝程序。

 

看吧,這就是最終的結果。


 


一個(gè)僅僅1.25MB的Swing即時(shí)戰略游戲,試問(wèn)如果我們不說(shuō)這是Java開(kāi)發(fā)的程序,又有幾個(gè)人能想得到連虛擬機帶執行程序打包后也僅僅1.25MB呢?而且事實(shí)上,它還可以變得更小,乃至精簡(jiǎn)到1MB之內。(留待下回說(shuō)明)

現在,我們將它安裝到?jīng)]有JRE的計算機上去看看結果吧。

 

炮彈照打,獅子照跑~~~完全OK。

那么下回,我們將進(jìn)一步尋找究竟有哪些因素限制了JRE的體積,并進(jìn)一步解放JRE。

本例中以GreenJVM直接壓縮精簡(jiǎn)后綠色版游戲下載地址:http://download.csdn.net/source/612943

(由于Install4J打包有一些細節準備下回分解,所以安裝程序暫時(shí)不發(fā),透露一點(diǎn),壓縮的JRE要想正常使用Install4J發(fā)布,還需補充一些文件,可參見(jiàn)Install4J正常安裝時(shí)釋放在temp中的某些東西~)

 

本文來(lái)自CSDN博客,轉載請標明出處:http://blog.csdn.net/cping1982/archive/2008/09/06/2892844.aspx

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用 Java8 自帶的javapackager 打包應用程序
Eclipse關(guān)聯(lián)JDK源碼
java打包-exe文件-最終以setup形式發(fā)布的解決之道
精簡(jiǎn)出最小 jre
談?wù)刯ava的運行機制
classpath設置
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久