`
乌鸟heart
  • 浏览: 51734 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

关于Java Logger类的使用问题 - 内存不释放

    博客分类:
  • Java
阅读更多

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

 

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

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

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

 

代码如下:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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. }  


调用代码:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. Log.log(Level.ALL,"some info");//此时内存增加20M  
  2. Log.close();//内存无变化,尽管加上System.GC()也没有变化  
1
4
分享到:
评论

相关推荐

    详细介绍Java的内存管理与内存泄露

    为了更好地理解Java中的内存泄露问题,我们首先要深入了解Java是如何管理和处理内存的。Java作为一种高级编程语言,其内存管理机制主要包括对象的分配和释放两部分。 1. **对象分配**:在Java中,对象的创建是由...

    Android内存泄漏[参考].pdf

    总之,理解Java内存管理和内存泄漏的原因是防止这类问题的关键。通过合理管理对象引用,及时解除无用对象的引用,以及利用适当的引用类型,可以有效避免内存泄漏,保证程序的稳定性和性能。在开发过程中,结合内存...

    Java数据库通用操作类.doc

    - **释放资源**:确保在使用完 `ResultSet` 后关闭它,以避免内存泄漏或资源占用过多的问题。 ### 六、异常处理 - 在执行数据库操作时,可能会遇到各种异常情况,如连接失败、SQL 语法错误等。 - 通常使用 try-...

    java音乐播放器源代码

    在Java中,你可以使用try-catch-finally结构来捕获和处理异常,并使用日志框架(如Log4j或java.util.logging.Logger)记录运行时信息,以帮助调试和优化程序。 总的来说,学习并实践这个Java音乐播放器源代码,你...

    Java演示常见的数据库异常处理情况.rar

    可以使用`Log4j`、`SLF4J`或`java.util.logging.Logger`等日志框架。 通过这个压缩包中的代码实例,开发者可以学习如何优雅地处理这些异常,确保程序在面对数据库异常时不会崩溃,而是能够给出适当的反馈或进行恢复...

    Java编码最佳实践指南

    例如,将`_logger`声明为类级别的静态常量,而不是在每次实例化时创建。 4. **字符串拼接**:在构建字符串时,使用`StringBuffer`或`StringBuilder`而非`+`运算符,可以显著提高性能,尤其是在循环中。 5. **SQL...

    Java安全与质量编码规范.docx

    - **不使用的方法要注释说明:** 对于不再使用的代码,应予以注释并说明原因。 - **避免差一错误:** 在数组索引、循环条件等地方注意边界问题。 - **避免表达式恒为true:** 避免逻辑判断结果始终为真的情况。 -...

    android内存管理机制分析[归类].pdf

    Android系统的内存管理机制是其高效运行的关键之一。Android内核基于Linux 2.6,它包含了一系列特定于Android平台的设备...开发者应当熟悉Java和Android的内存机制,定期检查并优化内存使用,以减少内存问题的发生。

    资源转换器,资源转换器程序,Java源码.zip

    6. 异常处理:在处理文件和资源转换时,需要确保正确处理可能出现的异常,如文件不存在、读写权限不足、内存不足等问题。通过使用`try-catch`块和`finally`块,确保资源得到适当的释放。 7. 用户界面设计:如果资源...

    JAVA数据库取数据万用方法.doc

    5. **释放资源**:虽然在提供的代码片段中没有明确展示,但在实际应用中,应该确保在方法末尾释放所有使用的资源,包括关闭`ResultSet`、`PreparedStatement`以及`Connection`对象。 #### 四、代码详解 ```java ...

    Spring关闭Tomcat Servlet容器时内存泄漏问题解决方案

    在Spring与Tomcat结合使用的过程中,可能会遇到一个棘手的问题:当Spring关闭Tomcat Servlet容器时,出现内存泄漏。这通常发生在容器停止时,某些应用组件未能正确地释放其持有的资源,导致Java虚拟机(JVM)无法...

    计算机等级考试四级考试中英文术语对照.pdf

    24. **磁心存储器(Core Storage/Core Store)**:早期的内存形式,使用磁心作为存储介质。 25. **计数器(Counter)**:用于跟踪事件次数的硬件或软件组件。 26. **控制论(Cybernetics)**:研究控制系统和通信的科学...

Global site tag (gtag.js) - Google Analytics