自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

J2ME應(yīng)用程序內(nèi)存優(yōu)化的幾種途徑

開發(fā) 前端
本文向大家簡(jiǎn)單介紹一下如何進(jìn)行J2ME應(yīng)用程序內(nèi)存優(yōu)化,開發(fā)J2ME應(yīng)用程序時(shí),out momory內(nèi)存溢出這種痛苦經(jīng)常經(jīng)常出現(xiàn)。要知道在手機(jī)上用內(nèi)存必須勒緊褲腰帶,手機(jī)是以K來計(jì)算的。

開發(fā)J2ME應(yīng)用程序時(shí),out momory內(nèi)存溢出這種痛苦經(jīng)常經(jīng)常出現(xiàn),所以J2ME應(yīng)用程序內(nèi)存的優(yōu)化是非常必要而必須的,這里向大家簡(jiǎn)單描述一下,相信本文介紹一定會(huì)讓你有所收獲。

J2ME應(yīng)用程序內(nèi)存優(yōu)化

開發(fā)J2ME應(yīng)用程序時(shí),out momory內(nèi)存溢出這種痛苦經(jīng)常經(jīng)常出現(xiàn)。要知道在手機(jī)上用內(nèi)存必須勒緊褲腰帶,手機(jī)是以K來計(jì)算的。寫手機(jī)程序讓人回到了8086時(shí)代。J2ME應(yīng)用程序內(nèi)存的優(yōu)化是非常必要而必須的。

一.代碼優(yōu)化

內(nèi)存會(huì)溢出肯定和代碼逃不了關(guān)系,垃圾回收器是java的一大優(yōu)點(diǎn),顯然這個(gè)特性為代碼編寫者省了不少事,但這個(gè)特性卻帶來了不少隱患。
舉個(gè)例子在游戲當(dāng)中經(jīng)常有不同場(chǎng)景的切換,如從游戲邏輯退到主菜單邏輯,對(duì)游戲邏輯對(duì)象的態(tài)度,很多人會(huì)選擇忘記內(nèi)存的釋放,就等著垃圾回收器自己來善后。但是實(shí)際上垃圾回收器并非實(shí)時(shí)的,它不像C++的Delete語句馬上釋放不用的內(nèi)存。當(dāng)從游戲邏輯切換到主菜單邏輯這時(shí)兩個(gè)對(duì)象同時(shí)存在很可能這時(shí)內(nèi)存就不夠用了。

實(shí)際上垃圾回收器在j2me上并不怎么好用,在j2me上所有垃圾手工釋放才比較直接有效,除簡(jiǎn)單類型以外所有對(duì)象都必須顯式地置空例如 imgs=null; 實(shí)際上java提供了一個(gè)不錯(cuò)的工具用來查找內(nèi)存溢出,java.lang.Runtime.freeMemory() 。它可以返回當(dāng)前的剩余內(nèi)存數(shù),將它適當(dāng)?shù)陌卜旁诖a中可以有效的監(jiān)測(cè)內(nèi)存使用狀況。
有一部份的j2me程序員寫代碼存在不良習(xí)慣。

例1: 

  1. //a 不為空  
  2. a=new menu(); 

這里面包含兩個(gè)問題:

1. 該段代碼是先創(chuàng)建對(duì)象然后再進(jìn)行賦值操作的,也就是說在這期間有兩個(gè)對(duì)象同時(shí)存在這就很可能會(huì)產(chǎn)生溢出。

2. 這樣做也會(huì)妨礙垃圾回收器的工作

較好的寫法如下: 

  1. a=null;  
  2. System.gc(); // 回收a以前引用的對(duì)象  
  3. a=new menu(); 

雖然麻煩了點(diǎn)但在j2me中還是必要的。

例2:

drawString(”游戲時(shí)間:” + time ,50,50,Graphics.LEFT|Graphics.TOP);
“游戲時(shí)間:” + time 很***在paint()方法當(dāng)中每次都被刷一遍顯示在屏幕上。該語句每次運(yùn)行時(shí)會(huì)重新分配內(nèi)存來存儲(chǔ) ”游戲時(shí)間:” + time 而顯示完以后又必須由垃圾回收器釋放,用了雙倍時(shí)間,并且容易發(fā)生內(nèi)存溢出。依此類推在重復(fù)執(zhí)行的方法里應(yīng)盡量避免重復(fù)定義對(duì)象。與paint()方法類似在循環(huán)里也有類似的情況存在。

例3:

把所有對(duì)象的初始化放在構(gòu)造函數(shù)里,大多數(shù)人通常的做法是把當(dāng)前所要用到的資源通通一次初始化完畢。
很大一部份的內(nèi)存溢出都是發(fā)生在構(gòu)造函數(shù)中。內(nèi)存使用的高峰期都是在構(gòu)造函數(shù)中所以避開這個(gè)高峰能有效的防止溢出。
比較好的做法是***次使用時(shí)初始化。如下所示 

  1. if (img==null){  
  2. //初始化  

現(xiàn)在做游戲都需要地圖數(shù)組,聲音數(shù)組,還有一些其它資源。
這些資源可以放在代碼中也可以放在文件當(dāng)中,但是建議將這些資源放在文件中需要時(shí)在loading進(jìn)來。這些資源如果放在代碼中則會(huì)占用不小的代碼段空間,而代碼一般是程序一運(yùn)行就裝載到內(nèi)存當(dāng)中。

除上面列舉的方法外還有其他的小方法, 比如關(guān)閉沒用的rms ,關(guān)閉沒用的網(wǎng)絡(luò)連接,關(guān)閉沒用的流。正確地停止線程。良好的程序架構(gòu)減少代碼偶合性也是一個(gè)不錯(cuò)的方法。#p#

二.圖片優(yōu)化

下面我們來看一下J2ME應(yīng)用程序內(nèi)存優(yōu)化的圖片優(yōu)化的概念。j2me的內(nèi)存殺手無疑非圖片莫屬,一張3k的圖片可以占用20多k的內(nèi)存。防止內(nèi)存溢出最直接的辦法就是從圖片入手。圖片壓縮: 多數(shù)人馬上會(huì)想到這個(gè)辦法。不錯(cuò)這個(gè)辦法是最有效的。在網(wǎng)上有許多圖片壓縮工具,這里就不詳細(xì)說明了。
假如你有多張規(guī)格一樣的圖片,那么建議你把它做成一張長(zhǎng)條圖片。有兩個(gè)原因:

1>這樣節(jié)省存儲(chǔ)空間和內(nèi)存空間。10張圖片的內(nèi)容放在一張當(dāng)中和10張小圖片相比,文件大小減少了不少。

2>10張圖片需要10個(gè)image 對(duì)象需要進(jìn)行10次io操作浪費(fèi)時(shí)間還浪費(fèi)內(nèi)存。當(dāng)把所有圖片都存成一張,內(nèi)存又容易溢出了… 圖片太大了不要把不同界面的圖片整合在一起否則經(jīng)常會(huì)得不償失,這就需要在實(shí)踐中不斷調(diào)整了。

作圖時(shí)也有一些細(xì)節(jié)需要注意,顏色數(shù)量,分辯率,圖像模式(***是索引顏色),畫布大小都會(huì)影響到圖片大小。J2ME應(yīng)用程序內(nèi)存優(yōu)化如何使用工具進(jìn)行優(yōu)化呢。

三.工具優(yōu)化

混淆器是用來保護(hù)代碼的以加大反編譯的難度,實(shí)際上用它來優(yōu)化程序也是不錯(cuò)的選擇。

其實(shí)有兩點(diǎn)好處:

1> 壓縮程序大小: 一個(gè)60k的程序經(jīng)常可以壓掉10多k。10k的空間對(duì)于低端手機(jī)來說可不是個(gè)小數(shù)

2> 節(jié)省內(nèi)存空間: 代碼減小了內(nèi)存里的代碼段自然就短了。
 

【編輯推薦】

  1. J2ME應(yīng)用程序架構(gòu)模型
  2. J2ME開發(fā)環(huán)境搭建必備手冊(cè)
  3. 經(jīng)驗(yàn)總結(jié) J2ME學(xué)習(xí)札記
  4. 瞻望J2ME前景,看J2ME路在何方?
  5. J2ME開發(fā)環(huán)境的搭建和運(yùn)行

 

 

責(zé)任編輯:佚名 來源: dayanmei.com
相關(guān)推薦

2010-09-30 16:13:13

J2ME應(yīng)用程序

2010-09-29 09:54:09

J2ME應(yīng)用程序

2010-10-09 16:13:10

J2ME應(yīng)用程序

2009-03-12 10:22:27

EclipseJ2MEJDT

2010-09-30 13:39:52

2010-09-29 08:57:04

J2ME前景

2010-09-29 13:50:31

J2MEJ2SE

2010-02-04 13:15:59

Android J2M

2010-09-29 13:09:48

OTAJ2ME程序

2010-09-30 13:48:10

J2ME游戲引擎

2010-10-09 15:40:19

CookieJ2ME

2010-09-29 12:45:50

J2ME

2010-09-29 10:10:06

J2ME代碼優(yōu)化

2010-09-30 09:56:26

J2ME Polish

2010-09-29 09:19:39

J2ME開發(fā)工具

2011-05-12 14:34:55

cookieJ2ME

2010-09-29 16:20:06

J2MEWeb服務(wù)API

2010-09-29 10:41:18

J2MEJVM

2010-09-30 12:53:00

J2MECSS

2009-06-10 16:27:54

Eclipse調(diào)試J2
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)