饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機開發(fā)網(wǎng)

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          http://www.3geye.net/bbs/thread-221-1-1.html 原文地址,

          自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收

          開發(fā)J2AVA ME 程序最需要關(guān)注的是內(nèi)存的占用,開發(fā)性能高,適配多種機型的軟件不是件容易的事情,我在國慶時間整理下我的開發(fā)思路寫了這個類,給大家參考下


          package com.gggeye.util;

          import java.util.Hashtable;
          import java.util.Stack;
          import java.util.TimerTask;
          import java.util.Vector;

          import com.gggeye.demo.Logger;

           

           
           /**
            *  內(nèi)存管理,工具類,主要是用于項目的內(nèi)存控制,
            *  此類相對重要點,因為涉及到各個方面的內(nèi)存回收
            *  此類除了提供一些常用的方法進行回收外,還還提供一個自動回收的機制,不過不建議采用,自動回收機制是是當
            *  空閑內(nèi)存小于指定內(nèi)存大小時候,釋放內(nèi)存,回收的時間是5秒回收一次<br/>
            * 創(chuàng)建日期 2007-10-1
            * @author wuhua
            * <p><b>MSN </b> gggeye@hotmail.com
            * <p><b>EMAIL</b> gooogledev@gmail.com </p>
            * <p>網(wǎng)站支持 <a >http://www.3geye.net</a></p>
            * <p>網(wǎng)站論壇 <a >http://www.3geye.net/bbs</a></p>
            * <p>wuhua的博客 <a >http://wuhua.3geye.net</a></p>
            */
          public   class MemoryManager implements Runnable {
             
              /**
               * 釋放內(nèi)存,當內(nèi)存小于addtionMemory時候,進行垃圾回收,主動回收
               * @param addtionMemory
               */
              public final static void release(long addtionMemory) {
                  long freeMemory = Runtime.getRuntime().freeMemory();
                  //如果空閑的內(nèi)存小于指定的內(nèi)存,則回收
                  if(freeMemory<=addtionMemory){
                      Logger.println("回收前的內(nèi)存==>" +MemoryManager.freeMemoryKByte());
                      System.gc();
                      Logger.println("回收后的內(nèi)存==>" +MemoryManager.freeMemoryKByte());
                  }
              }
             
              /**
               * 釋放指定緩存對象
               * @param addtionMemory
               * @param cache
               */
              public final static void release(long addtionMemory, Object cache){
                  release(addtionMemory);
                  if(cache != null){
                      if(cache instanceof java.util.Hashtable){
                          Hashtable i = (Hashtable)cache;
                          i.clear();         
                      }else if(cache instanceof java.util.Vector){
                          Vector i = (Vector)cache;
                          i.removeAllElements();
                      }else if(cache instanceof java.util.Stack){
                          Stack i = (Stack)cache;
                          i.removeAllElements();
                      }        
                      cache = null;
                      System.gc();
                  }   
              }
             
              /**
               * 得到系統(tǒng)空閑內(nèi)存,單位是k
               * @return 返回空閑內(nèi)存的大小
               */
              public final static String freeMemoryKByte(){
                  return freeMemoryByte()/1024 + "k";
              }
             
             
              public final static long  freeMemoryByte(){
                  return Runtime.getRuntime().freeMemory();
              }
             
             
           

              private static MemoryManager instance ;
              private static TimerTask task;
              /**
               * 自動回收內(nèi)存機制,此方法,應(yīng)該在系統(tǒng)第一次調(diào)用的時候調(diào)用,如果重復(fù)調(diào)用則會拋出異常
               * @param time
               */
              public static void autoGC(long time) throws java.lang.RuntimeException{
                  if(instance == null){
                      instance  = new MemoryManager();
                      task = TimerTaskManager.getInstace().create(instance, time);
                  }else
                      throw new RuntimeException("GC is starting...");
              }
             
              public static void colse(){
                  if(instance != null) instance = null;
                  if(task != null){
                      task.cancel();
                      task = null;
                  }
                 
              }

              /**
               * 實現(xiàn)對內(nèi)存的自動化管理
               */
              public void run() {
                  //小于12k內(nèi)存的時候釋放內(nèi)存
                  release(1200000);
                   
              }

          }


          爬蟲工作室 -- 專業(yè)的手機軟件開發(fā)工作室
          3G視線 -- 專注手機軟件開發(fā)
          posted on 2007-10-05 15:34 3G工作室 閱讀(1242) 評論(5)  編輯  收藏 所屬分類: j2me

          Feedback

          # re: 自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收 2007-10-05 17:31 BeanSoft
          很不錯, 支持了!  回復(fù)  更多評論
            

          # re: 自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收 2007-10-06 09:19 千里冰封
          呵呵,不錯,不過不一定能釋放得出來  回復(fù)  更多評論
            

          # re: 自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收[未登錄] 2007-10-06 16:26 咖啡
          好像是只是調(diào)用,但真正釋放還是考java虛擬機  回復(fù)  更多評論
            

          # re: 自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收 2007-10-07 12:05 爬蟲工作室
          具體可以釋放的我測試過了。在真機器也測試過。基本上主流的機器可以做到這點,在對于開發(fā)手機軟件很需要這個東西,要不然就一下子就內(nèi)存溢出  回復(fù)  更多評論
            

          # re: 自己寫的內(nèi)存管理工具類,支持簡單的垃圾回收 2010-01-26 16:17 過河卒
          貌似是完成了內(nèi)存的判斷與釋放提示.沒看出實際工作中使用的價值?  回復(fù)  更多評論
            

          主站蜘蛛池模板: 怀柔区| 宁城县| 南安市| 潢川县| 厦门市| 西宁市| 吉林省| 滕州市| 湘乡市| 新化县| 红桥区| 金乡县| 泸定县| 峨眉山市| 禄丰县| 云浮市| 新田县| 双辽市| 达拉特旗| 磐石市| 祁连县| 汨罗市| 霸州市| 道孚县| 七台河市| 莎车县| 华安县| 临夏市| 衡南县| 景宁| 抚州市| 广河县| 常州市| 禹城市| 德格县| 德钦县| 南投市| 黄大仙区| 郯城县| 沁阳市| 宁明县|