`
wuhua
  • 浏览: 2111559 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自己写的内存管理工具类,支持简单的垃圾回收

阅读更多
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视线 -- 专注手机软件开发
分享到:
评论

相关推荐

    C++实现的垃圾回收管理类

    "C++实现的垃圾回收管理类"是一个设计用于解决内存泄漏问题的高级工具。内存泄漏是当程序员使用`new`关键字分配了内存,但忘记或者未能通过`delete`来释放它时发生的问题。这会导致程序占用的内存持续增长,最终可能...

    内存管理 c++ C++内存回收

    C++不同于许多高级语言,如Java或Python,它不提供自动垃圾回收机制,因此程序员需要手动进行内存分配和释放。本文将深入探讨C++中的内存管理,包括内存回收、内存泄漏以及相关的检测工具。 首先,我们要理解C++的...

    jvm内存基本结构及垃圾回收

    垃圾回收是JVM自动进行内存管理的一种机制,其主要目标是回收不再使用的对象所占用的内存空间,以防止内存泄漏。GC分为多个阶段: 1. **标记(Marking)**:确定哪些对象是“活的”,哪些是可回收的。常见的算法有...

    java高级之垃圾回收机制

    垃圾回收机制是Java的一大亮点,它极大地简化了内存管理的任务,使得开发者可以更加专注于业务逻辑的实现。通过深入理解JVM内存模型以及不同的垃圾回收算法,可以帮助我们更好地优化程序性能,提高代码质量。在实际...

    Java垃圾回收详解

    综上所述,Java的垃圾回收机制为开发者提供了一个强大而灵活的工具,能够有效减少内存管理方面的负担。然而,理解垃圾回收的基本原理及其工作方式对于优化程序性能至关重要。通过合理运用各种垃圾回收策略和引用类型...

    JVM内存管理和JVM垃圾回收

    Java虚拟机(JVM)内存管理和垃圾回收是Java编程中至关重要的概念,它们直接影响着程序的性能和稳定性。本文将详细解析JVM内存结构以及垃圾回收机制。 首先,JVM内存主要分为四个区域: 1. **堆(Heap)**:这是...

    JVM内存管理和垃圾回收

    **JVM内存管理和垃圾回收** Java虚拟机(JVM)是Java程序运行的基石,它为Java应用程序提供了运行环境。JVM的内存管理是其核心功能之一,它涉及到对象的创建、分配、以及释放,而垃圾回收(Garbage Collection, GC...

    Java内存与垃圾回收调优.docx

    Java内存管理是Java开发中的核心话题,特别是对于大型和高性能应用而言,良好的内存管理和垃圾回收调优至关重要。本文将深入探讨Java内存结构、垃圾回收机制以及调优策略。 首先,Java内存主要分为堆内存和非堆内存...

    C++垃圾回收站源代码!!

    由于C++不提供内置的垃圾回收机制,开发者需要手动管理内存,通过new和delete操作来分配和释放内存。然而,这种做法可能导致内存泄漏、悬挂指针等问题。为了解决这些问题,我们可以设计一个“垃圾回收站”来模拟类似...

    .NETFramework垃圾回收3.5Version.pdf

    .NET Framework的垃圾回收机制是内存管理的核心部分,主要负责托管对象的内存分配和释放。当开发者使用`new`运算符创建对象时,运行时会在托管堆中为对象分配内存。托管堆是.NET Framework管理的内存区域,其中的...

    Java中内存泄露及垃圾回收机制.pdf

    内存泄露问题在Java这样的现代编程语言中也存在,尽管Java内置了垃圾回收机制来自动管理内存。 #### 二、内存泄露的原因 在Java中,内存泄露主要由以下几个原因引起: 1. **超出对象的引用范围**:当一个对象的...

    java垃圾回收

    Java垃圾回收(Garbage Collection, 简称GC)是Java虚拟机(JVM)管理内存的一种机制,它自动地识别并清理不再使用的对象,从而避免了程序员手动管理内存可能导致的内存泄漏问题。垃圾回收是Java语言的一个重要特性...

    c++垃圾回收源代码

    在C++编程语言中,垃圾回收(Garbage Collection, GC)通常不是标准库的一部分,而是由程序员手动管理内存。然而,描述中提到的" C++实现new创建出来的对象,不需要手动delete"暗示了这里可能使用了一种特殊的内存...

    C内存管理内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题

    由于C++没有内置的垃圾回收机制,程序员必须手动管理内存,这可能导致内存泄漏,成为程序稳定性的重大隐患。 内存管理主要涉及三个核心概念:内存分配、内存泄漏和内存回收。 1. 内存分配: 在C++中,内存主要...

    理解Java垃圾回收

    Java垃圾回收(Garbage Collection, GC)是Java编程语言中一个重要的特性,它自动管理程序运行过程中的内存分配和释放,避免程序员手动处理内存管理,从而减少错误和提高程序的可维护性。以下是对Java垃圾回收的深入...

    JVM 虚拟机原理、内存结构、优化、垃圾回收分析等全方位的讲解,专业!

    Java虚拟机(JVM)是Java程序运行的基础...这包括深入学习内存结构、掌握类加载机制、了解JVM的优化策略以及熟练运用垃圾回收分析工具。通过这些知识,开发者能够更好地解决性能问题,编写出更加高效和稳定的Java程序。

    内存自动释放管理工具

    内存管理工具通常会集成这样的功能,定期或按需进行垃圾收集,保持内存的清洁。 4. 性能优化:通过智能分析和调整内存分配策略,内存管理工具可以减少程序的内存占用,提升运行速度。例如,它可以预测程序的内存...

    Java内存泄露及内存无法回收解决方案

    Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...

    用模板实现的C++垃圾回收器.zip

    对于想要了解如何在C++中实现垃圾回收,或者想要增强自己在模板技术和多线程内存管理方面知识的人来说,这些资源是非常宝贵的。 总之,这个项目展示了如何使用C++模板技术来设计一个通用的垃圾回收器,这对于C++...

Global site tag (gtag.js) - Google Analytics