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

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视线 -- 专注手机软件开发
Java垃圾回收与JIT编译优化 Java中的垃圾回收(GC)和即时编译(JIT)是提升应用程序性能的关键机制。垃圾回收通过自动回收不再使用的对象内存,防止内存泄漏并优化资源使用。常见的GC算法包括Serial、Parallel、CMS、G1和ZGC,每种算法适用于不同场景,如小堆、大堆或低延迟需求。JIT编译则在运行时将频繁执行的字节码编译为本地机器码,显著提升执行效率,优化技术包括内联、逃逸分析和分级编译。为优化Java应用性能,开发人员应选择合适的GC算法、管理堆大小、减少对象创建、优化字符串使用,并利用工具监控GC和JIT行为。通过 阅读详情

相关推荐

golang垃圾回收浅析

GC 常见垃圾回收算法 引用计数 标记清除 三色标记算法 复制算法 分代收集算法 golangGC的发展 golang GC 三色标记 主要流程 写屏障 三色标记状态的记录 扫描与对象元信息 GC 的触发 gcTriggerHeap gcTriggerTime gcTriggerCycle 辅助GC GC Pacer 根对象 标记队列 GC的流程 Phase1:标记前准备(STW) Phase2 并发标记 Phase3:标记终止(STW) Phase4:并发回收

惜暮 2925

java内存计算工具类(3种)

关系 1byte = 8bit 1024bit = 1K 1024K = 1M 1024M = 1G 1024G = 1T。java最小单位 字节bit。需要引入Maven依赖。

Jerry_小蓝的博客 1093

【JS垃圾回收】带你探索垃圾回收机制和Chrome V8垃圾回收机制

文章目录前言一、什么是垃圾回收?1.基本思路2.为什么要进行垃圾回收二、怎样进行垃圾回收1.标记清除优点缺点2.引用计数优点缺点三、Chrome V8垃圾回收机制1.为什么需要优化垃圾回收算法2.基本概念3.新生代垃圾回收器 - Scavenge4.老生代垃圾回收 - Mark-Sweep & Mark-CompactMark-SweepMark-Compact5.并行回收全停顿并行6.增量标记增量7.懒性清理总结 前言 javaScript 是门魅力无限的语言,关于它的 GC(垃圾回收)方面,

hhhhhhhssss的博客 3501

java-内存管理工具类(MemoryUtils)

Java 内存管理主要由 JVM (Java Virtual Machine) 来完成。堆 (Heap):用于存储对象实例,所有的对象都在堆上分配内存。堆中的内存被垃圾回收器管理。栈 (Stack):用于存储局部变量和方法调用信息,栈上的内存由程序自动管理。方法区 (Method Area):存储类结构(元数据)和静态变量等。本地方法栈 (Native Method Stack)和程序计数器 (PC Register):分别用于调用本地方法和跟踪线程执行。

Flying_Fish_roe的博客 1136

Java 垃圾回收(GC)

Java 的垃圾回收(GC)是 Java 虚拟机(JVM)对内存管理的核心机制之一。GC 的作用是 自动回收不再被使用的对象,从而释放堆内存,避免程序因手动管理内存出现问题(如内存泄漏、悬挂指针等)。

1007

Golang指针与垃圾回收:内存管理机制

Golang(Go语言)以“简单、高效、并发友好”著称,其内存管理机制是支撑这些特性的关键。指针的安全使用与垃圾回收(GC)的自动管理,探讨它们如何共同实现高效的内存控制,覆盖基础概念、底层原理、实战技巧和常见问题。本文将按照“概念→原理→实战→应用”的逻辑展开:先通过生活案例理解指针和GC;再拆解Golang的内存管理核心机制(逃逸分析、三色标记法);接着用代码实例演示指针对GC的影响;最后分享工具和优化技巧。Golang指针:安全的“门牌号”(不支持算术运算),用于引用堆内存中的对象。

AI Agent Harness Engineering 1107

JavaScript的内存管理与垃圾回收

JavaScript提供了高效的内存管理机制,它的垃圾回收功能是自动的。在我们创建新对象、函数、原始类型和变量时,所有这些编程元素都会占用内存。那么JavaScript是如何管理这些元素并在它们不再使用时清理它们的呢?在本节中,我们将讨论JavaScript中的内存管理的所有内部过程。我们将关注以下主题:JavaScript中的内存生命周期JavaScript中的内存分配当内存不再使用时的释放JavaScript的垃圾回收JavaScript垃圾回收中的引用概念标记-清除算法。

weixin_66128399的博客 1312

阿里云对象存储静态工具类(AliOSSUtils.java)快速上手!!!

根据官网和网上分享的代码自己整理了一个阿里云OSS工具类,自动创建标准公开权限的存储空间,支持上传图片,音频,视频,PDF各种文件,批量上传,上传后支持在线预览,文件路径处理,浏览器文件下载(支持源文件中文名下载),文件删除,获取指定目录下的所有文件并且支持按时间排序(网上oss排序解决办法很少,自己花了点时间实现的,其实很简单),足够日常使用!!!

JavaScript-垃圾回收机制(GC)

垃圾回收的几种方式:标记清除法、引用计数法、分代式垃圾回收

十二的博客 8497

WINDOWS 内存清理小工具

有些程序在退出时往往不能释放系统资源,所以我们在计算机开的时间长了以后,有人会建议我们去重新启动一下计算机,其实没这个必要,有了这个小工具你可以不用为冗余的程序烦恼了,他可以自动帮你清理内存或者你手动清理内存,同时他几乎不好用内存。

java内存监控工具jvisualvm

监控工具VisualVM VisualVM 是Netbeans的profile子项目,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。这个软件是基于NetBeans开发的了。 从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一

Java 内存管理与垃圾回收机制详解

Java 内存模型(JMM,Java Memory Model)定义了 Java 程序中不同线程之间如何共享数据。JMM 的主要目标是确保在多线程环境中,程序的正确性、可见性和有序性。内存模型决定了 Java 程序如何访问内存中的变量以及如何与操作系统的内存管理交互。JVM 将内存划分为不同的区域,包括堆、栈、方法区等。每个区域有不同的用途和生命周期。垃圾回收(Garbage Collection,GC)是 JVM 自动管理内存的一个重要机制。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1281

Java 内存分析工具

Java内存分析工具,解决内存泄漏问题

垃圾回收的优点和缺点

Java的垃圾回收机制提供了自动化内存管理,减少了手动管理内存的复杂性,并显著降低了内存泄漏和悬挂指针等问题的发生。垃圾回收的优点包括简化内存管理、提高程序健壮性和安全性、提高开发效率以及支持跨平台一致性。然而,垃圾回收也有其缺点,如性能开销、不确定的停顿、内存碎片化问题以及对大对象的处理效率较低等。在实际开发中,通过选择合适的垃圾回收器、合理配置垃圾回收参数以及遵循内存管理的最佳实践,可以有效地优化Java应用程序的性能,减少垃圾回收对系统的影响。

Flying_Fish_roe的博客 1020

自己写的轻量级清理内存工具

支持全快捷键操作,轻量级,支持64位,支持server,简单易用,可自动清理内存。原理就是windows的EmptyWorkingSet api,安全无毒~纯自己业余时间写的。完善用户体验,托盘,隐藏窗口等都已实现。

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 605

【Go专家编程——内存管理——垃圾回收】

所谓的垃圾就上不在需要的内存块,垃圾如果不清理,这些内存块就没有办法再次被分配使用。在不支持垃圾回收的编程语言中,这些垃圾内存就上泄露的内存。

qq_45467608的博客 965

【Qt笔记】1.VSCode搭建Qt运行环境

Qt6之后已经抛弃qmake,使用cmake。cmake相对qmake来说只有优点没有缺点。使用VSCode搭建完Qt的运行环境就能开开心心debug了.vscode需要使用的插件:2.Qt tools3.CMakec++插件可以不关注,缺啥都会提醒你.正常安装即可。

没有手牌的博客 2万+

G1 垃圾回收器详细介绍:高效的内存管理工具

G1(Garbage-First)垃圾回收器是 JVM 中的一种垃圾回收器,旨在替代传统的 CMS(Concurrent Mark-Sweep)和 Parallel 回收器。G1 通过将堆内存划分为多个区域(Region),并根据垃圾回收的优先级动态调整回收策略,实现了更高效的垃圾回收。低延迟:通过增量回收和并发标记减少停顿时间。高吞吐量:优化内存回收效率,提升应用性能。可预测性:提供可预测的停顿时间,适合实时应用。

u011403205的博客 2027

【Agent从入门到实践】40 容错优化:异常处理、重试机制、降级策略

各位小伙伴,咱们的多Agent框架一路优化到现在,决策快、执行效率高、资源用得省,看似啥都行,但只要一遇到网络波动、工具故障、数据异常调用web_search工具时网络超时,整个检索任务直接失败,写作Agent没数据可用向量库连接异常,向量检索直接崩掉,依赖检索结果的Agent全趴窝单个Agent执行出错,整个并行任务流程直接中断,前功尽弃高并发下部分工具调用失败,框架没有备用方案,只能返回任务失败说白了,咱们之前的框架只有正常执行逻辑,没有异常兜底逻辑。

人工智能AI技术 909

湿式双离合器自动变速器simulink建模与仿真

随着汽车工业的不断发展,自动变速器在提高汽车性能、驾驶舒适性和燃油经济性等方面发挥着越来越重要的作用。湿式双离合器自动变速器(Wet Dual-Clutch Transmission,简称 WDCT)作为一种先进的自动变速器技术,具有换挡速度快、动力传递平稳、燃油经济性好等优点,被广泛应用于各类汽车中。结构组成湿式双离合器自动变速器主要由双离合器、齿轮传动系统、液压控制系统和电子控制系统等部分组成。双离合器:由两个独立的离合器组成,分别控制奇数挡和偶数挡。通过切换两个离合器的工作状态,可以实现快速换挡。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 348

Python内存管理方式和垃圾回收算法解析

这篇文章主要介绍了Python内存管理方式和垃圾回收算法解析,介绍了传统的垃圾回收机制,其工作方法,finalizer的问题等相关内容,具有一定参考价值,需要的朋友可以了解下。 概要 在列表,元组,实例,类,字典和函数中存在循环引用问题。有 del 方法的实例会以健全的方式被处理。给新类型添加GC支持是很容易的。支持GC的Python与常规的Python是二进制兼容的。 分代式回收能运行工作(目前...

python编程基础教程 840

若依开源系统多数据源整合clickhouse数据库详细步骤

若依开源系统多数据源整合clickhouse数据库详细步骤

java之书-资源 897
上一篇: 使用GameCanvas制作星空效果
下一篇: 3G视线J2ME 工具包0.0.1版本发布了
raorq
博客等级 码龄17年 275粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值