关于Java Logger类的使用有关问题 - 内存不释放
关于Java Logger类的使用问题 - 内存不释放
原文地址: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()也没有变化