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++实现的垃圾回收管理类"是一个设计用于解决内存泄漏问题的高级工具。内存泄漏是当程序员使用`new`关键字分配了内存,但忘记或者未能通过`delete`来释放它时发生的问题。这会导致程序占用的内存持续增长,最终可能...
C++不同于许多高级语言,如Java或Python,它不提供自动垃圾回收机制,因此程序员需要手动进行内存分配和释放。本文将深入探讨C++中的内存管理,包括内存回收、内存泄漏以及相关的检测工具。 首先,我们要理解C++的...
垃圾回收是JVM自动进行内存管理的一种机制,其主要目标是回收不再使用的对象所占用的内存空间,以防止内存泄漏。GC分为多个阶段: 1. **标记(Marking)**:确定哪些对象是“活的”,哪些是可回收的。常见的算法有...
垃圾回收机制是Java的一大亮点,它极大地简化了内存管理的任务,使得开发者可以更加专注于业务逻辑的实现。通过深入理解JVM内存模型以及不同的垃圾回收算法,可以帮助我们更好地优化程序性能,提高代码质量。在实际...
综上所述,Java的垃圾回收机制为开发者提供了一个强大而灵活的工具,能够有效减少内存管理方面的负担。然而,理解垃圾回收的基本原理及其工作方式对于优化程序性能至关重要。通过合理运用各种垃圾回收策略和引用类型...
Java虚拟机(JVM)内存管理和垃圾回收是Java编程中至关重要的概念,它们直接影响着程序的性能和稳定性。本文将详细解析JVM内存结构以及垃圾回收机制。 首先,JVM内存主要分为四个区域: 1. **堆(Heap)**:这是...
**JVM内存管理和垃圾回收** Java虚拟机(JVM)是Java程序运行的基石,它为Java应用程序提供了运行环境。JVM的内存管理是其核心功能之一,它涉及到对象的创建、分配、以及释放,而垃圾回收(Garbage Collection, GC...
Java内存管理是Java开发中的核心话题,特别是对于大型和高性能应用而言,良好的内存管理和垃圾回收调优至关重要。本文将深入探讨Java内存结构、垃圾回收机制以及调优策略。 首先,Java内存主要分为堆内存和非堆内存...
由于C++不提供内置的垃圾回收机制,开发者需要手动管理内存,通过new和delete操作来分配和释放内存。然而,这种做法可能导致内存泄漏、悬挂指针等问题。为了解决这些问题,我们可以设计一个“垃圾回收站”来模拟类似...
.NET Framework的垃圾回收机制是内存管理的核心部分,主要负责托管对象的内存分配和释放。当开发者使用`new`运算符创建对象时,运行时会在托管堆中为对象分配内存。托管堆是.NET Framework管理的内存区域,其中的...
内存泄露问题在Java这样的现代编程语言中也存在,尽管Java内置了垃圾回收机制来自动管理内存。 #### 二、内存泄露的原因 在Java中,内存泄露主要由以下几个原因引起: 1. **超出对象的引用范围**:当一个对象的...
Java垃圾回收(Garbage Collection, 简称GC)是Java虚拟机(JVM)管理内存的一种机制,它自动地识别并清理不再使用的对象,从而避免了程序员手动管理内存可能导致的内存泄漏问题。垃圾回收是Java语言的一个重要特性...
在C++编程语言中,垃圾回收(Garbage Collection, GC)通常不是标准库的一部分,而是由程序员手动管理内存。然而,描述中提到的" C++实现new创建出来的对象,不需要手动delete"暗示了这里可能使用了一种特殊的内存...
由于C++没有内置的垃圾回收机制,程序员必须手动管理内存,这可能导致内存泄漏,成为程序稳定性的重大隐患。 内存管理主要涉及三个核心概念:内存分配、内存泄漏和内存回收。 1. 内存分配: 在C++中,内存主要...
Java垃圾回收(Garbage Collection, GC)是Java编程语言中一个重要的特性,它自动管理程序运行过程中的内存分配和释放,避免程序员手动处理内存管理,从而减少错误和提高程序的可维护性。以下是对Java垃圾回收的深入...
Java虚拟机(JVM)是Java程序运行的基础...这包括深入学习内存结构、掌握类加载机制、了解JVM的优化策略以及熟练运用垃圾回收分析工具。通过这些知识,开发者能够更好地解决性能问题,编写出更加高效和稳定的Java程序。
内存管理工具通常会集成这样的功能,定期或按需进行垃圾收集,保持内存的清洁。 4. 性能优化:通过智能分析和调整内存分配策略,内存管理工具可以减少程序的内存占用,提升运行速度。例如,它可以预测程序的内存...
Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...
对于想要了解如何在C++中实现垃圾回收,或者想要增强自己在模板技术和多线程内存管理方面知识的人来说,这些资源是非常宝贵的。 总之,这个项目展示了如何使用C++模板技术来设计一个通用的垃圾回收器,这对于C++...