`

Java会发生内存泄漏吗?

    博客分类:
  • Memo
阅读更多
首先,答案是肯定的。
Java虽然有垃圾回收器,但依然存在泄漏。

Java内存泄漏跟C/C++内存泄漏的概念不一样:C/C++的内存泄漏是指Malloc了一些资源,最后没有free掉,内存没有回收,这个是真正意义上的内存黑洞;而Java的泄漏则可能是别的原因,Java对象的存在对程序已经没有意义,但是对象在程序周期内一直存在,这个可能会导致Java的内存泄漏。

总结原因,大概有下面几个方面:
  • Java的某个对象被一个生命周期很长的类不当持有,这个是Java内存泄漏最主要的原因,对象在某个Task中没有主动清除,其宿主在工作时会不断增加该对象的引用数,也就会吃掉更多的内存,从而导致内存泄漏;
  • 在Runtime Exception的时候,没有用finally{}来释放某些资源;
  • 变量范围的扩大,比如说一个方法的局部变量被定义成类的变量,这样导致变量的生命期变长,有可能导致泄漏(这个和第一点还是有点像的)。


Reference:http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/
分享到:
评论

相关推荐

    java内存泄露、溢出检查方法和工具

    3. **分析内存泄漏**:MAT提供多种视图来帮助定位问题,其中饼状图是最直观的一种。通过查看" Dominator Tree "视图,可以看到内存消耗最大的对象和它们之间的引用关系。此外,"Leak Suspects"报告会自动分析可能的...

    如何解决Java内存泄漏

    Java内存泄漏是软件开发中一个常见的问题,它不仅会影响应用程序的性能,还可能导致系统崩溃。通过深入了解Java的内存管理机制,并借助于专业的工具如OptimizeIt,可以有效地检测和解决内存泄漏问题。此外,开发者还...

    java 内存泄漏

    在Java中,内存泄漏主要发生在Java堆内存中,其主要原因有: - **对象引用不再使用**:当一个对象不再被引用时,理论上应该被垃圾回收器回收。但如果存在对这个对象的“隐式”引用,使得垃圾回收器无法识别,那么这...

    java避免内存泄露

    然而,在实际应用中,仍然存在一些特殊情况会导致内存泄露的发生。 #### 二、内存泄露的原因分析 1. **未及时关闭资源**:例如文件句柄、数据库连接等,如果不主动关闭,即使不再使用,也会占用系统资源。 2. **...

    基于Java的内存泄露分析及定位

    内存泄漏通常发生在程序错误地管理内存,导致某些不再使用的对象无法被垃圾收集器正常回收。 Java内存管理主要包括内存的分配和释放。内存分配主要通过`new`关键字创建对象来实现,而内存的释放则是由垃圾收集器...

    Java内存泄露及内存无法回收解决方案

    4. Native内存泄漏:Java应用可能使用JNI(Java Native Interface)与C/C++代码交互,若C/C++部分存在内存泄漏,也会间接导致Java内存泄漏。 解决内存泄漏的方法主要包括: 1. 使用工具监控:通过工具如VisualVM、...

    java内存分析-内存泄露问题.rar

    长期积累,这些未释放的内存会消耗掉大量系统资源,使得程序运行效率降低,严重时会导致Java应用的OutOfMemoryError。 为了检测和解决内存泄露,我们可以使用一些工具进行内存分析,如VisualVM、JProfiler、MAT...

    Java内存泄露检测

    Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...

    Java内存泄露_JVM监控工具介绍

    Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、Session溢出等等。为了检测和解决Java...

    java内存分配 内存泄漏

    Java 内存分配和内存泄漏是Java编程中关键的概念,涉及到Java虚拟机(JVM)的工作原理和程序性能优化。 Java 内存分配主要发生在JVM的三个主要区域:堆(Heap)、栈(Stack)和方法区(Method Area)。堆是Java对象...

    Java系统中内存泄漏测试方法的研究

    在Java系统中,内存泄漏是一个严重的问题,它可能导致系统性能下降,甚至系统崩溃。这篇研究主要探讨了如何检测和分析Java应用中的内存泄漏问题。以下是对这个主题的详细阐述: 一、内存泄漏的理解 内存泄漏是指...

    Java 中会存在内存泄漏吗1

    这些无用但可达的对象会占用宝贵的内存资源,随着时间推移,如果内存泄漏持续发生,可能会导致系统性能下降,甚至出现系统崩溃。 在Java中,内存泄漏可能出现在以下几种情况: 1. 长生命周期的对象持有短生命周期...

    关于JAVA内存泄漏问题注意事项

    1. **理解可达性和无用性**:内存泄漏在Java中发生时,通常是由于某些对象尽管不再使用,但仍然可以通过对象引用图到达,这使得垃圾收集器无法识别它们为无用对象,从而导致它们占据内存空间。 2. **及时释放引用**...

    java 内存泄露分析流程

    内存泄露通常发生在堆内存中,因为对象实例如果不再使用但无法被垃圾收集器回收,就会占用大量内存。 2. **垃圾收集机制** Java通过垃圾收集器(Garbage Collector, GC)自动管理内存。当一个对象不再有引用指向它...

    Java加载dll,导致Java进程内存泄露

    标题 "Java加载dll,导致Java进程内存泄露" 描述了一个在Java编程中常见的问题,即通过Java Native Interface (JNI)加载动态链接库(dll)可能导致内存泄漏。这通常发生在Java程序与C/C++代码交互时,因为JNI允许Java...

    jni层内存泄漏检测工具

    3. **内存泄漏检测**:当Java对象被JNI层引用但不再被Java代码使用时,LeakTracer会将其标记为潜在的内存泄漏。 4. **报告生成**:LeakTracer会生成详细的报告,列出所有检测到的内存泄漏情况,包括泄漏对象的信息...

    java垃圾回收及内存泄漏.pptx

    ### Java垃圾回收及内存泄漏知识点详解 #### 一、Java内存管理 1. **运行时数据区**:...通过对内存管理的理解和垃圾回收机制的学习,开发者能够更好地编写高效、稳定的Java程序,并有效避免内存泄漏等问题的发生。

    如何排查Java内存泄漏?看完我给跪了!

    Java的自动垃圾回收机制虽然在大多数情况下工作得很好,但并不能完全防止内存泄漏的发生。内存泄漏通常发生在程序中,当不再需要的对象仍然被引用,导致它们无法被垃圾收集器清理。这种现象可能导致资源浪费,系统...

    lassLoader的关系以及如何防止ClassLoader内存泄漏

    内存泄漏通常发生在类加载器生命周期结束后,但其所加载的类和资源仍被引用,无法被垃圾收集器回收。以下是一些可能导致ClassLoader内存泄漏的场景和预防措施: 1. 静态变量引用:静态变量会随着类的加载而存在,...

Global site tag (gtag.js) - Google Analytics