Java内存泄露诊断与Tomcat7实践

3星 · 超过75%的资源 需积分: 10 2 下载量 63 浏览量 更新于2024-07-27 收藏 193KB PDF 举报
本次讲座由Mark Thomas主讲,他是Apache Tomcat的资深工程师,拥有超过7年的经验。他的专业领域包括Tomcat内存泄露检测与预防技术的开发,负责了Tomcat 7.0.x版本的主要工作,如内存泄漏检测工具的实现、Servlet 3.0、JSP 2.2和EL 2.2的关键部分,以及安全页面的创建。在Apache Software Foundation,他不仅是成员,还在基础设施团队担任职务,并提供Tomcat和httpd相关的咨询与培训。 演讲的主题是"Java内存泄露的诊断与解决方案",主要涵盖以下几个部分: 1. **起源回顾**:Mark Thomas分享了他如何开始在Tomcat中处理内存问题,特别是当讨论到Servlet 3.0和Tomcat 7时,他提到了一个关于permgen错误的即兴观点,指出重载时的permgen错误并非由某些已知原因引起。 2. **内存泄露是如何发生的**:这部分将深入探讨内存泄露的原理,包括应用程序如何在运行过程中意外地占用越来越多的内存,如果不加以管理和解决,可能导致性能下降甚至系统崩溃。 3. **诊断过程演示**:Mark会展示实际的内存泄漏诊断技巧,通过案例分析帮助听众理解如何通过工具和技术识别内存泄漏的迹象。 4. **根因分析**:这部分将区分出已经解决的内存泄漏问题以及尚未修复的潜在问题,帮助开发者了解哪些类型的内存泄漏是当前关注的重点。 5. **未来计划与展望**:Mark还将分享关于未来Java内存管理的发展趋势,以及Tomcat团队在内存泄漏预防方面的策略和计划。 6. **互动环节**:最后,讲座将留出时间解答听众关于内存泄露及其解决方案的疑问,确保所有人都能从这次分享中受益。 通过这次讲座,听众可以学习到最新的Java内存泄露检测方法、常见问题的解决策略,以及如何在日常开发中避免和处理内存泄漏,提升应用的稳定性和性能。
2014-07-05 上传
在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。Java语言对内存管理做了自己的优化,这就是垃圾回收机制。Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),然后由GC(garbage collection)负责自动回收不再使用的内存。     上面是Java内存管理机制的基本情况。但是如果仅仅理解到这里,我们在实际的项目开发中仍然会遇到内存泄漏的问题。也许有人表示怀疑,既然Java的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?这个问题,我们需要知道GC在什么时候回收内存对象,什么样的内存对象会被GC认为是“不再使用”的。     Java中对内存对象的访问,使用的是引用的方式。在Java代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间。在Java程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数据类型相同)。GC线程会从代码栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的。如果GC线程通过这种方式,无法跟踪到某一块堆内存,那么GC就认为这块内存将不再使用了(因为代码中已经无法访问这块内存了)。