| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
支持简单垃圾回收的内存管理工具类开发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); } }
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||