读书人

自各儿写的内存管理工具类支持简单的

发布时间: 2012-09-06 10:37:01 作者: rapoo

自己写的内存管理工具类,支持简单的垃圾回收
http://www.3geye.net/bbs/thread-221-1-1.html 原文地址,

自己写的内存管理工具类,支持简单的垃圾回收开发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);
??? ??? ?
??? }

}


爬虫工作室 -- 专业的手机软件开发工作室
3G视线 -- 专注手机软件开发

读书人网 >移动开发

热点推荐