<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    北大青鳥IT教育博客

     

    根據(jù)J2ME虛擬機(jī)對程序編寫的優(yōu)化方式

      1、關(guān)于J2ME的虛擬機(jī)

      J2ME虛擬機(jī)最嚴(yán)重影響程序性能的就是進(jìn)行垃圾回收操作,一旦進(jìn)行垃圾回收,程序的主線程一般會暫時掛起,以方便進(jìn)行垃圾回收操作。在程序上的表現(xiàn)就是程序出現(xiàn)暫時的停頓,這將極大地影響用戶的體驗(yàn)。因此必須盡量減少垃圾回收進(jìn)行的次數(shù),近最大努力控制垃圾回收的執(zhí)行,盡量減少垃圾回收執(zhí)行的時間。

      J2ME虛擬機(jī)中JIT技術(shù)的應(yīng)用,目前我沒有發(fā)現(xiàn)有顯著的文章來進(jìn)行描述,由于JIT技術(shù)需要實(shí)時編譯并且耗費(fèi)內(nèi)存較多,因此,我認(rèn)為MIDP1.0中并沒有采用JIT技術(shù)。而MIDP2.0中有可能采用JIT技術(shù),但是J2ME的JIT技術(shù)與J2SE的性能應(yīng)該不是一個數(shù)量級上的,由于CPU性能有限,注定無法做復(fù)雜的JIT編譯,而且由于JIT耗費(fèi)內(nèi)存,也注定無法對代碼進(jìn)行大規(guī)模的JIT編譯。

      2、關(guān)于虛擬機(jī)

      我認(rèn)為,目前客戶端虛擬機(jī)技術(shù),應(yīng)該說是發(fā)展到一個轉(zhuǎn)折點(diǎn),未來可能會出現(xiàn)重大的技術(shù)突破。目前無論是Java還是.net基本上采用的都是分代式垃圾回收和分支預(yù)測JIT技術(shù)。因此目前這兩個虛擬機(jī)的性能相差不是很大,因此對于程序的優(yōu)化,基本上真對這兩種技術(shù)來進(jìn)行。

      關(guān)于分代式垃圾回收

      分代式垃圾回收技術(shù)應(yīng)該是目前客戶端虛擬機(jī)垃圾回收技術(shù)的主流,就是說增加對壽命短對象的收集,而減少對長壽命對象的收集。這里使用術(shù)語第一代和第二代的術(shù)語來描述。第一代應(yīng)當(dāng)說是程序新分配的內(nèi)存,從統(tǒng)計(jì)數(shù)據(jù)來看,對象越年輕,被回收的可能性就越大,因此,對第一代的垃圾回收進(jìn)行的頻繁一些。而一旦進(jìn)行了第一代的垃圾回收,未被回收的對象將會成為第二代對象。對于第二代對象的回收,由于它的生命期更長,因此在到達(dá)第二代對象空間閾值的時候并不會收集,這樣就減少了回收的次數(shù)。防止垃圾回收帶來的系統(tǒng)停頓。

      關(guān)于分支預(yù)測

      JIT技術(shù)在虛擬機(jī)中已經(jīng)被證明能極大地加快程序速度,而目前基本上采用的是帶有分支預(yù)測技術(shù)的JIT編譯器,因此越背頻繁執(zhí)行的語句,就越有可能被JIT編譯器編譯,從而加快程序的速度。但是目前的對J2ME虛擬機(jī)來說,性能有限,因此JIT的應(yīng)用的也有限,在程序?qū)懽魃希瑧?yīng)當(dāng)幫助進(jìn)行JIT編譯。

      3、J2ME(MIDP)對于這這兩種技術(shù)的優(yōu)化

      針對垃圾回收的優(yōu)化

      垃圾回收優(yōu)化的核心思想就是減少垃圾回收的次數(shù),增加垃圾回收中資源的回收量。

      先說垃圾回收次數(shù)的優(yōu)化,在上文中已經(jīng)說明,分代式垃圾回收,第一代的垃圾回收進(jìn)行的次數(shù)較頻繁,因此垃圾回收首先針對第一代垃圾回收,就是說應(yīng)該避免在成員函數(shù)中產(chǎn)生新的對象。

      這里在書中有明顯的應(yīng)用,在滾屏游戲的設(shè)計(jì)中,需要進(jìn)行矩形的判斷,這里采用的方式都是定義的到類中的矩形,而不是定義函數(shù)矩形,在碰撞判斷中調(diào)用的矩形都是在類的構(gòu)造函數(shù)中生成的,并不在函數(shù)中生成,由于需要頻繁調(diào)用碰撞檢測,因此如果定義在函數(shù)中將會增加垃圾回收的次數(shù)。具體情況如下:

      class Sprite

      {

      public Rect rect1 = new Rect();

      public Rect rect2 = new Rect();

      bool checkCollision()

      {

      //位置判斷后,進(jìn)行初始化,但是不分配產(chǎn)生新的對象

      rect1.x,rect1.y,rect1.dx,ect1.dy

      rect2.x,rect2.y,rect2.dx,rect2.dy

      }

      }

      這樣就顯著減少了對象的生成,注意這里還有一個優(yōu)化的地方,基本上每次判斷,dx,dy值是固定的,因此在構(gòu)造函數(shù)中應(yīng)當(dāng)初始化dx,dy,這樣將會減少初始化。因此書中的程序中有很多看起來不應(yīng)當(dāng)定義為類程序的變量,都被定義為類成員,這極大地減少了垃圾回收的次數(shù)。

      而對于二代的垃圾回收,就是在程序中不要隨時把無用的資源置為null,這樣可能會激發(fā)二代回收。

      而對于盡可能增加垃圾回收的資源回收量,使調(diào)用顯示垃圾回收,在進(jìn)行大規(guī)模的資源更換的時候。這個優(yōu)化技術(shù)書中沒有說明,但與程序源代碼中有體現(xiàn)。對于類程序?qū)ο螅灰獰o故置為null,而是在資源更換的時候,一般來說這個時候是更換關(guān)卡的時候,此時應(yīng)當(dāng)把上關(guān)卡中不再使用的資源全部置為null,然后顯示調(diào)用垃圾回收。再栽入新的資源,這個時候新的資源能夠順利栽入,舊的資源也能夠順利回收。而由于關(guān)卡切換,進(jìn)行稍微的等待也是可行的,不會影響用戶體驗(yàn)。

      針對JIT編譯的優(yōu)化

      JIT編譯的優(yōu)化就是用戶模擬JIT編譯器來進(jìn)行程序編譯的優(yōu)化,對于頻繁執(zhí)行的地方,盡量優(yōu)化。對于程序中的分支判斷,要把經(jīng)常調(diào)用的分支寫到判斷前面。而在我前面的文章中提到的關(guān)于成員函數(shù)使用get和set,這個在JIT編譯器中基本上是被優(yōu)化掉的,沒有多少意義。如果不是太頻繁,也不用時全部應(yīng)用破壞程序結(jié)構(gòu),只把最頻繁的進(jìn)行優(yōu)化即可。

      這里還有一個優(yōu)化的地方,對于特別頻繁的執(zhí)行語句,如下的取得數(shù)據(jù)成員的方式:

      a.b,如果是int型,最好使用一個臨時變量

      int temp = a.b;

      這將減少類程序的取得時間,雖然只有幾個時鐘周期,但是對于特別頻繁的調(diào)用和復(fù)雜算法,性能還是有一定的提升。

      4、總結(jié)

      這里提到的優(yōu)化措施每一處對程序的影響都很小,但是積少成多,水滴石穿,注意的地方多了,就會對程序性能產(chǎn)生影響,并且很多優(yōu)化是全局性的,這在程序的架構(gòu)設(shè)計(jì)之初就應(yīng)該考慮好的。

    posted on 2009-09-26 15:18 武漢北大青鳥 閱讀(97) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    默認(rèn)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 伊人久久亚洲综合影院首页| 亚洲自偷自偷精品| 亚洲色一区二区三区四区| 91成人免费在线视频| 亚洲一区二区三区播放在线| 免费观看的毛片大全| 亚洲AV成人噜噜无码网站| 2021久久精品免费观看| 国产色在线|亚洲| 麻豆国产VA免费精品高清在线 | 亚洲国产美国国产综合一区二区 | 亚洲精品免费在线视频| 亚洲美女视频免费| 久久笫一福利免费导航| 亚洲另类无码专区首页| 国产又黄又爽又猛的免费视频播放 | 亚洲第一区精品观看| 一级女性全黄久久生活片免费| 亚洲综合色区在线观看| 国产精品免费高清在线观看| 18亚洲男同志videos网站| 人禽杂交18禁网站免费| 美女视频黄视大全视频免费的| 亚洲国产成人久久综合野外| 国产日韩一区二区三免费高清| 精品日韩亚洲AV无码一区二区三区| 青青久在线视频免费观看| 免费人成视频在线播放| 久久精品国产亚洲AV麻豆不卡| 久久国产免费福利永久| 特黄aa级毛片免费视频播放| 亚洲AV无码成人精品区在线观看 | 2020国产精品亚洲综合网| 国产精品99久久免费| 免费无码又爽又刺激高潮软件| 亚洲av无码片区一区二区三区| 四虎永久免费地址在线观看| 无码人妻精品中文字幕免费| 亚洲欧洲专线一区| 久久精品国产精品亚洲艾| 国产亚洲精品免费|