關於Java Logger類的使用問題 - 內存不釋放

原文地址: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()也沒有變化
相關文章
相關標籤/搜索