Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 362|回复: 0

[J2ME学习]j2me内存管理工具类

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 05:02:30 | 显示全部楼层 |阅读模式
    开发J2AVA ME 程序最需要关注的是内存的占用,开发性能高,适配多种机型的软件不是件容易的事情,我在国庆时间整理下我的开发思路写了这个类,给大家参考下

    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;

    /**
       *  内存管理,工具类,主要是用于项目的内存控制,
       *  此类相对重要点,因为涉及到各个方面的内存回收
                                                                                        
      
      
        *  此类除了提供一些常用的方法进行回收外,还还提供一个自动回收的机制,不过不建议采用,自动回收机制是是当
       *  空闲内存小于指定内存大小时候,释放内存,回收的时间是5秒回收一次<br/>
       * 创建日期 2007-10-1
       * @author wuhua
       * <p><b>MSN </b> gggeye@hotmail.com
       * <p><b>EMAIL</b> gooogledev@gmail.com </p>
       * <p>网站支持 <a href="http://www.3geye.net">http://www.3geye.net</a></p>
       * <p>网站论坛 <a href="http://www.3geye.net/bbs">http://www.3geye.net/bbs</a></p>
       * <p>wuhua的博客 <a href="http://wuhua.3geye.net">http://wuhua.3geye.net</a></p>
       */

       public   class MemoryManager implements Runnable {
         
         /**
          * 释放内存,当内存小于addtionMemory时候,进行垃圾回收,主动回收
          * @param addtionMemory
          */
         public final static void release(long addtionMemory) {
             long freeMemory = Runtime.getRuntime().freeMemory();
             //如果空闲的内存小于指定的内存,则回收
             if(freeMemory<=addtionMemory){
                 Logger.println("回收前的内存==>" +MemoryManager.freeMemoryKByte());
                 System.gc();
                 Logger.println("回收后的内存==>" +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();
             }   
         }
         
         /**
          * 得到系统空闲内存,单位是k
          * @return 返回空闲内存的大小
          */
         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;
         /**
          * 自动回收内存机制,此方法,应该在系统第一次调用的时候调用,如果重复调用则会抛出异常
          * @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;
             }
             
         }

         /**
          * 实现对内存的自动化管理
          */
         public void run() {
             //小于12k内存的时候释放内存
             release(1200000);
             
         }

    }
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 06:52 , Processed in 0.376586 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表