`

浅谈Java内存泄露

    博客分类:
  • Java
阅读更多

   很多人知道C++的内存泄露,但并不知道Java的内存泄露问题。实际上,虽然JVM拥有GC,但是GC不是万能的,GC只有在判断一个对象不再拥有有效引用时才进行回收。如果一个对象不再被需要,但是对其的有效引用又没有被完全释放,这种情况下就会出现Java的内存泄露。

 

   有一篇博客深入剖析了这个场景,建议大家阅读:http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

 

   其实,借用这篇博客中的例子就能很好的阐释Java内存泄露的场景。

 

   1. 用一张图解释

 

     

   注解:Java内存泄露只有在灰色区域代表的场景下才会发生。

 

 

   2. 用一个实例解释

Vector v=new Vector(10);

for (int i=1;i<100; i++)
{
	Object o=new Object();
	v.add(o);
	o=null;	
}
 

   注解:这个例子中一个Vector实例引用了100个Object实例,而且把这些Object实例置为null,但是它们依然无法被回收,应为对象v还有效引用着这些实例,因此就造成了内存的泄露,解决方案就是将v对象置为null或者先将o对象从v中删除。

 

 

  • 大小: 3.4 KB
分享到:
评论

相关推荐

    浅谈JAVA垃圾回收机制.pdf

    浅谈 JAVA 垃圾回收机制 Java 垃圾回收机制是 Java 语言中的一种自动内存管理机制,它可以自动回收内存中的垃圾,避免代码运行时由于忘记释放对象而带来的内存泄漏问题。 Java 中的垃圾回收机制主要通过两种算法来...

    浅谈Java语言评价胜出的8大技术优势

    ### 浅谈Java语言评价胜出的8大技术优势 #### 1. 强大的API支持 Java提供了非常丰富的API支持,包括网络编程中的Socket API、数据库操作中的SQL API、图形用户界面的Swing和AWT API等。这些API不仅功能强大而且...

    浅谈Java技术对互联网时代的重要作用.pdf

    浅谈Java技术对互联网时代的重要作用 Java技术是互联网时代不可或缺的一部分,自从1996年初Sun公司发布第一个Java开发工具以来,Java语言就成为了跨平台的、面向对象的编程语言。Java语言的优良特性,如可移植性、...

    浅谈C/C++内存泄露及其检测工具

    内存泄漏是C/C++编程中一个严重的问题,它指的是程序在申请内存后,无法释放不再使用的内存空间。本文主要探讨了两种主要的解决方案——Smart Pointer和Garbage Collection,以及内存泄漏的检测工具。 首先,Smart ...

    浅谈java连接池

    - 连接未正确关闭可能导致内存泄漏。 - 连接数量无法有效控制,可能引发服务器崩溃。 **数据库连接池的工作原理** 为解决这些问题,引入了数据库连接池。连接池管理数据库连接,就像一个预分配的资源池,应用程序...

    浅谈Java编程中的内存泄露情况

    Java内存泄露通常涉及对象生命周期和垃圾回收机制。当一个对象不再被任何引用所指向,理论上它应该被垃圾回收器回收。但若长生命周期的对象持有短生命周期对象的引用,即使短生命周期对象已完成其使命,由于引用的...

    浅谈java内存管理与内存溢出异常

    Java内存管理是Java虚拟机(JVM)的关键组成部分,它主要负责对象的创建、分配、初始化以及回收。本文将深入探讨Java内存管理的原理以及内存溢出异常的原因和解决策略。 首先,Java与C/C++在内存管理上的一个重要...

    java培训教程-浅谈java虚拟机.pdf

    4. **无用单元收集堆(Garbage-collected heap)**:Java对象在堆内存中分配,JVM负责自动管理内存,包括对象的创建和销毁,通过无用单元收集(Garbage Collection)机制来回收不再使用的内存,避免内存泄露。...

    浅谈Java中的变量.pdf

    正确地管理和使用变量,可以提高程序的性能,减少内存泄漏,确保程序的稳定性和安全性。在编程实践中,应遵循良好的变量命名规范,合理控制变量的作用域,注意变量的初始化和生存期,以及理解不同类型变量在内存中的...

    浅谈Java堆外内存之突破JVM枷锁

    浅谈Java堆外内存之突破JVM枷锁 本文主要介绍了Java堆外内存的概念,包括JVM内存分配、JVM垃圾回收、堆外内存的垃圾回收等相关内容。Java开发者都知道,Java中不需要手动申请和释放内存,JVM会自动进行垃圾回收;而...

    浅谈java+内存分配及变量存储位置的区别

    Java内存分配机制是Java编程中不...理解Java内存分配和变量存储位置对于优化代码、避免内存泄漏和理解垃圾回收机制至关重要。开发者应当根据变量的生命周期和使用场景,合理选择存储位置,以达到高效、安全的内存管理。

    浅谈Java的虚拟机结构以及虚拟机内存的优化

    此外,了解垃圾回收机制让我们能更好地管理对象引用,适时释放不再需要的对象,避免内存泄漏。 总的来说,深入理解Java虚拟机的结构和内存模型,不仅可以提升代码的效率和稳定性,还能帮助我们编写出更符合JVM特性...

    浅谈Android应用的内存优化及Handler的内存泄漏问题

    此外,理解Java对象的引用类型对于防止内存泄漏也非常重要。强引用(strong)是最常见的引用类型,GC不会回收强引用的对象,可能导致内存泄漏。软引用(soft)在内存不足时才回收,适用于缓存场景。弱引用(weak)在...

    浅谈计算机软件开发的JAVA编程语言.zip

    Java使用垃圾回收机制自动管理内存,减少了程序员处理内存泄漏的风险。此外,Java采用类作为基本的构造单元,支持多态性和封装,使得代码更加模块化和易于维护。 Java的跨平台能力得益于Java虚拟机(JVM)。JVM允许...

    浅谈计算机软件开发中JAVA编程语言的应用.pdf

    例如,Java虚拟机具有垃圾回收机制,能够自动管理内存,减少了内存泄漏的风险。 Java语言的应用特点之一是其编程程序的独立性。由于其程序运行在虚拟机上,因此可以保证不同阶段(编程、改进、运行)的程序具有相对...

Global site tag (gtag.js) - Google Analytics