原文地址:http://www.ihuxu.com/p/236.htmlhtml
說明:這是一個利用Java Logger類的示例,完成簡單的日誌記錄功能。代碼中有部分類庫沒有說明,但不影響閱讀。java
本人技術是新手,對於java的內存問題有着很大的困惑。但願獲得網友的指點,問題描述以下:函數
本人寫了一個日誌類Log,當加載Log類後,內存會增加20M左右,可是等釋放了全部內存變量時,觀察內存狀況,並無釋放這個20M的跡象。諸如此類的問題還有不少,雖然Java有GC,不用顯示釋放內存。可是,確實不知道或者觀察不到內存的釋放過程。spa
代碼以下:日誌
1 package tools; 2 3 import java.io.IOException; 4 import java.util.logging.FileHandler; 5 import java.util.logging.Level; 6 import java.util.logging.Logger; 7 8 public class Log { 9 10 private static Logger l; 11 private static FileHandler fh; 12 13 /** 14 * 構造函數 15 * 16 * @since alpha 0.0.1 17 * 18 */ 19 private Log() { 20 try { 21 Log.l = Logger.getLogger(Config.GLOBAL_LOGGER_NAME); 22 Log.fh = new FileHandler(Config.LOG_FILE_NAME,true); 23 Log.l.addHandler(Log.fh); 24 Log.l.setLevel(Level.ALL); 25 } catch (SecurityException e) { 26 e.printStackTrace(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 32 /** 33 * 獲取單利 - 單利模式 34 * 35 * @return Logger 36 * @since alpha 0.0.1 37 * 38 */ 39 private static Logger getInstance() { 40 41 if( Log.l == null ) { 42 new Log(); 43 } 44 45 return Log.l; 46 } 47 48 /** 49 * log 50 * 51 * @param l 52 * @param str 53 * @since alpha 0.0.1 54 * 55 */ 56 public static void log(Level l, String str) { 57 Logger logger = Log.getInstance(); 58 logger.log(l,str); 59 } 60 61 public static void flush() { 62 Log.fh.flush(); 63 } 64 65 public static void close() { 66 if( Log.l != null ) { 67 Log.l = null; 68 } 69 if( Log.fh != null ) { 70 Log.fh.flush(); 71 Log.fh.close(); 72 Log.fh = null; 73 } 74 } 75 76 }
調用代碼:code
1 Log.log(Level.ALL,"some info");//此時內存增長20M 2 Log.close();//內存無變化,儘管加上System.GC()也沒有變化