原文地址: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()也没有变化
相关推荐
为了更好地理解Java中的内存泄露问题,我们首先要深入了解Java是如何管理和处理内存的。Java作为一种高级编程语言,其内存管理机制主要包括对象的分配和释放两部分。 1. **对象分配**:在Java中,对象的创建是由...
总之,理解Java内存管理和内存泄漏的原因是防止这类问题的关键。通过合理管理对象引用,及时解除无用对象的引用,以及利用适当的引用类型,可以有效避免内存泄漏,保证程序的稳定性和性能。在开发过程中,结合内存...
- **释放资源**:确保在使用完 `ResultSet` 后关闭它,以避免内存泄漏或资源占用过多的问题。 ### 六、异常处理 - 在执行数据库操作时,可能会遇到各种异常情况,如连接失败、SQL 语法错误等。 - 通常使用 try-...
在Java中,你可以使用try-catch-finally结构来捕获和处理异常,并使用日志框架(如Log4j或java.util.logging.Logger)记录运行时信息,以帮助调试和优化程序。 总的来说,学习并实践这个Java音乐播放器源代码,你...
可以使用`Log4j`、`SLF4J`或`java.util.logging.Logger`等日志框架。 通过这个压缩包中的代码实例,开发者可以学习如何优雅地处理这些异常,确保程序在面对数据库异常时不会崩溃,而是能够给出适当的反馈或进行恢复...
例如,将`_logger`声明为类级别的静态常量,而不是在每次实例化时创建。 4. **字符串拼接**:在构建字符串时,使用`StringBuffer`或`StringBuilder`而非`+`运算符,可以显著提高性能,尤其是在循环中。 5. **SQL...
- **不使用的方法要注释说明:** 对于不再使用的代码,应予以注释并说明原因。 - **避免差一错误:** 在数组索引、循环条件等地方注意边界问题。 - **避免表达式恒为true:** 避免逻辑判断结果始终为真的情况。 -...
Android系统的内存管理机制是其高效运行的关键之一。Android内核基于Linux 2.6,它包含了一系列特定于Android平台的设备...开发者应当熟悉Java和Android的内存机制,定期检查并优化内存使用,以减少内存问题的发生。
6. 异常处理:在处理文件和资源转换时,需要确保正确处理可能出现的异常,如文件不存在、读写权限不足、内存不足等问题。通过使用`try-catch`块和`finally`块,确保资源得到适当的释放。 7. 用户界面设计:如果资源...
5. **释放资源**:虽然在提供的代码片段中没有明确展示,但在实际应用中,应该确保在方法末尾释放所有使用的资源,包括关闭`ResultSet`、`PreparedStatement`以及`Connection`对象。 #### 四、代码详解 ```java ...
在Spring与Tomcat结合使用的过程中,可能会遇到一个棘手的问题:当Spring关闭Tomcat Servlet容器时,出现内存泄漏。这通常发生在容器停止时,某些应用组件未能正确地释放其持有的资源,导致Java虚拟机(JVM)无法...
24. **磁心存储器(Core Storage/Core Store)**:早期的内存形式,使用磁心作为存储介质。 25. **计数器(Counter)**:用于跟踪事件次数的硬件或软件组件。 26. **控制论(Cybernetics)**:研究控制系统和通信的科学...