今日部署tomcat的时候提示thread local 可能引起内存泄漏,于是研究了一下在java中可能引起内存泄漏的
一些点,简单写一下
内存泄漏,在我看来大体有两个原因。一是本身就是跟操作系统紧密相关的资源型对象,在使用的时候要比较小心,不然容易引起泄漏。比如:
1. socket
2. 线程
再者就是生命周期比较长的java对象。比如static类型的对象,或者对象本身被长生命周期的对象所直接或间接引用导致
没法gc,比如:
1.static 容器。如果数据量过大需要适当的清理策略
2. threadlocal. 因为threadlocal的生命周期在某种程度上讲是跟线程息息相关的,尤其在当前web server的线程都采用线程池的情况下,如果不当的使用threadlocal,那么很容易造成泄漏。比如tomcat 的hot deploy就比较容易
在这方面出现class loader 内存泄漏的问题。
3. anonymous class,inner class. 因为都有对于Outer class或者outer object的引用。如果anonymous class,inner class 本身被其他长生命周期的对象引用,那么也容易引起内存泄漏.比如Swing编程中的一些Listenr,如果
不需要的时候没有unregister.那么将会产生内存泄漏。
4. Introspector.这个东西是由Bootstrap class loader加载的,而且对introspect过的bean的class进行缓存,
所以如果一个J2ee server下面有多个应用,当stop其中某个应用的时候 ,如果不对Introspector进行flush,会引起
webapp下面的classloader的泄漏。Spring提供了IntrospectorCleanupListener进行这项flush的伟大工作。
暂时想到这些,以后使用的时候还是要多注意。
分享到:
相关推荐
总结来说,JNI层内存泄漏检测工具LeakTracer是Android开发中的一个强大工具,它可以帮助开发者有效地定位和解决JNI层的内存泄漏问题,提升应用的性能和可靠性。通过深入研究和实践,开发者可以更好地掌握JNI内存管理...
一旦配置好OptimizeIt,可以通过以下几个步骤来进行内存泄漏的检查: - **收集数据**:运行应用程序,并在运行过程中收集内存使用数据。 - **分析数据**:分析收集的数据,找出内存使用模式中的异常情况。 - **定位...
总结起来,这个压缩包包含的信息主要集中在以下几个方面: - **内存泄露识别**:如何通过工具和技巧定位和识别由CString引发的内存泄露问题。 - **解决策略**:提供了多种解决CString内存泄露的方法,可能包括正确...
### Java内存泄露总结 #### 一、Java内存回收机制 Java中的内存管理主要依赖于垃圾回收(Garbage Collection, GC)机制。与C/C++等需要手动管理内存的语言不同,Java虚拟机(JVM)自动处理对象的创建与销毁过程。...
总结来说,处理Tomcat内存泄漏涉及对JVM内存管理的深入理解、使用诊断工具、合理配置JVM参数、优化代码以及定期维护。通过正确使用`setenv`文件,可以有效地定制Tomcat的启动参数,以适应特定的应用场景并预防内存...
1. **开发者工具**:IE浏览器内置的开发者工具提供了内存诊断功能,可以查看内存使用情况和分配,帮助定位内存泄漏点。 2. **第三方工具**:JSLeaksDetector(如压缩包中的JSLeaksDetector.msi)是一款专门用于检测...
这样做既能保留MFC项目的内存检测能力,又能在非MFC代码中使用`debugnew`进行精细的内存泄漏分析。 #### 总结 `debugnew`作为一种轻量级且有效的内存泄露检测工具,通过重载`new`和`delete`操作符,在不显著增加...
良好的内存管理不仅能够提升程序性能,还能避免各种潜在的问题,如内存泄漏。本文将从C++内存泄露的基础概念入手,结合具体的代码示例,深入探讨内存泄露的原因、检测方法以及如何预防内存泄露。 #### 二、内存泄露...
为了防止内存泄露,开发者需要注意以下几点: - 尽量使用`getApplicationContext()`获取上下文,避免在静态变量或静态内部类中使用非静态外部成员变量。 - 对于内部类,使用弱引用来引用外部类的变量,并尽可能将其...
检测App是否存在内存泄露的方法通常包括以下几个方面: 1. 观察内存使用趋势:重复执行可能引发内存泄露的操作,观察内存使用量是否持续增长。如果在反复操作后,内存使用量仍持续上升且不会随着GC(垃圾回收)操作...
### VC++内存泄漏检测方式方法总结 #### 一、引言 在软件开发过程中,内存泄漏是一个常见的问题,尤其对于需要长时间稳定运行的应用程序来说,内存泄漏可能导致系统资源耗尽,进而引发应用崩溃或者系统不稳定。本文...
Java堆外内存泄露场景总结,包含几个常用的可能,如:JNI,NIO,AWT/Swing,Inflater&Deflater;
刚刚做完了一个项目的性能测试,“有幸”也遇到了内存泄露的案例,所以在此和大家分享一下。主要从以下几部分来说明,关于内存和内存泄露、溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机制;...
检测GDI内存泄露通常涉及以下几个步骤: 1. **监控GDI对象计数**:在应用程序运行过程中,可以定期检查系统的GDI对象计数。如果这个数值持续上升而没有正常下降,可能表明存在内存泄露问题。 2. **代码审查**:对...
Visual Leak Detector是一个开源的C++内存泄漏检测器,专为Windows平台设计,可以与Visual Studio无缝集成。它通过在运行时捕获堆分配和释放的信息,找出未能释放的内存块。VLD的使用非常简单,只需要将其包含在项目...
Visual Leak Detector 是一个强大的内存泄漏检测工具,它简化了C++程序员在Visual Studio中的内存管理任务。通过简单的集成和直观的报告,VLD可以帮助开发者快速定位和修复内存泄漏问题,提高软件的稳定性和性能。在...
- VC 下内存泄漏的检测:Visual Studio IDE提供了内置的诊断工具,可以检测由`new`和`delete`操作引起的内存泄露。 - 使用 BoundsChecker:这是一款强大的静态分析工具,能够找出未释放的内存块和可能的内存越界。 -...
在Android应用开发中,内存泄漏是一个非常重要的问题,它会导致应用程序占用过多的内存,从而影响性能,甚至引发应用崩溃。本文将深入探讨Android开发中最常见的五种内存泄漏情况,并提供相应的解决方案。 一、静态...