原文地址: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()也没有变化