原文地址:http://www.ihuxu.com/p/236.html

 

说明:这是一个利用Java Logger类的示例,完成简单的日志记录功能。代码中有部分类库没有说明,但不影响阅读。

本人技术是新手,对于java的内存问题有着很大的困惑。希望得到网友的指点,问题描述如下:

本人写了一个日志类Log,当加载Log类后,内存会增长20M左右,但是等释放了所有内存变量时,观察内存情况,并没有释放这个20M的迹象。诸如此类的问题还有很多,虽然Java有GC,不用显示释放内存。但是,确实不知道或者观察不到内存的释放过程。

代码如下:

 package tools;
 
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class Log {
 
    private static Logger l;
    private static FileHandler fh;
     
    /**
     * 构造函数
     *
     * @since alpha 0.0.1
     *
     */
    private Log() {
        try {
            Log.l = Logger.getLogger(Config.GLOBAL_LOGGER_NAME);
            Log.fh = new FileHandler(Config.LOG_FILE_NAME,true);
            Log.l.addHandler(Log.fh);
            Log.l.setLevel(Level.ALL);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
    /**
     * 获取单利 - 单利模式
     *
     * @return Logger
     * @since alpha 0.0.1
     *
     */
    private static Logger getInstance() {
         
        if( Log.l == null ) {
            new Log();
        }
         
        return Log.l;
    }
     
    /**
     * log
     *
     * @param l
     * @param str
     * @since alpha 0.0.1
     *
     */
    public static void log(Level l, String str) {
        Logger logger = Log.getInstance();
        logger.log(l,str);
    }
     
    public static void flush() {
        Log.fh.flush();
    }
     
    public static void close() {
        if( Log.l != null ) {
            Log.l = null;
        }
        if( Log.fh != null ) {
            Log.fh.flush();
            Log.fh.close();
            Log.fh = null;
        }
    }
     
}

调用代码:

 Log.log(Level.ALL,"some info");//此时内存增加20M
Log.close();//内存无变化,尽管加上System.GC()也没有变化

关于Java Logger类的使用问题 - 内存不释放的更多相关文章

  1. java Logger 类

    package org.rx.common; import org.slf4j.LoggerFactory; import java.util.Collections; import java.uti ...

  2. java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方

    一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...

  3. 【转载】java项目中经常碰到的内存溢出问题: java.lang.OutOfMemoryError: PermGen space, 堆内存和非堆内存,写的很好,理解很方便

    Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决 解决方案 在 catalin ...

  4. 【Java】关于JVM运行时内存空间、JVM垃圾回收机制

    参考的优秀文章 <深入理解Java虚拟机 JVM高级特性与最佳实线>(机械工业出版社) Java虚拟机的堆.栈.堆栈如何去理解? 聊聊JVM的年轻代 前言 本文是<深入理解Java虚 ...

  5. 一个Java对象到底占用多大内存?

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  6. Java如何获取系统cpu、内存、硬盘信息

    1 概述 前段时间摸索在Java中怎么获取系统信息包括cpu.内存.硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插 ...

  7. 一个Java对象到底占用多大内存

    在网上搜到了一篇博客讲的非常好,里面提供的这个类也非常实用: import java.lang.instrument.Instrumentation; import java.lang.reflect ...

  8. Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC

    [转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...

  9. 一个Java对象到底占多大内存

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

随机推荐

  1. 2017年P4中国峰会北京站 会议小结

    2017 P4 中国峰会 北京 本次会议依然侧重介绍P4,并highlight P4的benifit,大致分为以下几类: 1.学术界 - 未来网络的发展,为何提出P4技术? 未来网络和实体经济.其他学 ...

  2. UVa 10954 全部相加(Huffman编码)

    https://vjudge.net/problem/UVA-10954 题意:有n个数的集合S,每次可以从S中删除两个数,然后把它们的和放回集合,直到剩下一个数.每次操作的开销等于删除的两个数之和, ...

  3. 将正在使用的Ubuntu14.04 制作成镜像文件

    remastersys 是一个能够备份你的ubuntu系统的工具. 源码在github上能找到:Remastersys Source 可以直接 apt 安装: sudo add-apt-reposit ...

  4. ubuntu server 16.04(amd 64) 配置网桥,多网卡使用激活

    安装了Ubuntu16.04的server版本,结果进入系统输入ifconfig后发现,只有一个网卡enp1s0,还有一个网络回路lo,ifconfig -a 发现其实一共有四个网卡,enp1s0,e ...

  5. 《剑指offer》第三十六题(二叉搜索树与双向链表)

    // 面试题36:二叉搜索树与双向链表 // 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求 // 不能创建任何新的结点,只能调整树中结点指针的指向. #include < ...

  6. 【Python】Http Post请求四种请求体的Python实现

    前言 前几天一个刚接触Python不深的朋友问我的Python的xml格式Post请求怎么发送,刚好最近也在学习Http请求相关的内容,所以决定总结一下各类Post请求的Python实现. Happy ...

  7. 怎么运行cocos2dx 3.x simulator?

    1.simulator的好处是: 快速切换分辨率:F5快速重新启动项目: 这对于脚本语言来说都是很方便快捷的. 2.涉及到显示参数的文件有两个: ①lang,这个是菜单的语言文件,如果没有这个文件的话 ...

  8. SpringBoot中的数据库连接池

    内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...

  9. jsp forward跟redirect区别

    forward 相当于php的 require/include 属于服务器包含/跳转 request.getRequestDispatcher("result.jsp").forw ...

  10. php--------返回404状态

    php header()返回404状态代码的两种方式 //方式一 header('HTTP/1.1 404 Not Found');exit('404') //方式二 header("sta ...