`
H_eaven
  • 浏览: 32123 次
  • 性别: Icon_minigender_1
  • 来自: 鲨堡
文章分类
社区版块
存档分类
最新评论

内存泄漏(消除过期的对象引用)

阅读更多
内存泄漏:应用程序中保留了从不会再被使用的引用,引用未被释放,GC无法工作.
   import java.util.*;
public class Test 
{
	private Object[] objs;
	private int count;
	public Test(int size) {
	   objs = new Object[size];
	   count = 0;
	} 
	public void addEle(Object obj) {
	  
	   objs[count] = obj;
	   count++;
	}
	public Object removeLastEle() {
                if (count == 0) {
                   throw new RuntimeException("the stack is empty...");
                }
		Object obj = objs[--count];
		//objs[count] = null;
	    return obj;
	}
	public String toString() {
	   return Arrays.toString(objs);
	}
	public Object[] getArray() {
	   return objs;
	}
	public int getSize() {
	   return count;
	}
	public static void main(String[] args) {
	   Test test = new Test(3);
	   test.addEle("one");
	   test.addEle("two");
	   test.addEle("three");
	   //test.addEle("foure");
	   System.out.println(test);
	   System.out.println(test.removeLastEle());
	   System.out.println(test.getSize());
	   System.out.println(test);
	}

}

这是一个Simple Stack,
如果先增长,后压缩,会出现内存泄漏.
removeLastEle()

移除最后一个元素,array[length-1];
数组可用元素变为0到length-2,
最后一个为不再使用元素,但引用被保留在数组中,未被释放.
总结:一个类自己管理内存,就应该小心内存泄漏的问题了;一但一个元素被释放了,则该元素中包含的任何对象引用应该要被清空.
分享到:
评论

相关推荐

    GDB查找内存泄露

    当程序员通过`malloc`、`calloc`、`new`等函数分配内存后,忘记或无法在适当的地方调用`free`、`delete`等函数进行释放,这部分内存就可能成为泄露的对象。 在GDB中,可以利用其内置的内存检查功能来辅助查找内存...

    内存泄漏引用关系图

    3. **识别泄漏模式**:分析对象生命周期,寻找不正常的行为,如长生命周期的对象引用短生命周期的对象。 4. **代码审查**:根据分析结果,检查代码中可能的内存泄漏点,如静态字段、缓存、未关闭的资源等。 5. **...

    jni层内存泄漏检测工具

    它通过跟踪和分析JNI层的对象引用,帮助开发者识别那些没有被正确释放的本地资源。在Android平台上移植LeakTracer,意味着开发者可以在不离开Android环境的情况下,对应用的JNI代码进行深度内存诊断。 LeakTracer的...

    几个内存泄漏的例子

    内存泄漏是C++编程中一个严重的问题,它指的是程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无害,但随着时间推移,大量的内存泄漏会消耗掉系统的可用内存,导致性能下降甚至系统崩溃。...

    Android webview 内存泄露的解决方法

    最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递getApplicationContext。 1.避免在xml直接写webview...

    Windows内存泄漏排查工具

    在Windows操作系统中,内存泄漏是一种常见的性能问题,它会导致系统资源逐渐消耗殆尽,影响程序的稳定性和整体系统的运行效率。为了解决这个问题,开发者通常会使用专门的内存泄漏检测工具。本文将详细介绍两个用于...

    JProfiler对应用服务器内存泄漏问题诊断解决方案.docx

    解决内存泄漏问题的方法是:定位那些有内存泄漏的类或对象并修改完善这些类以避免内存泄漏。方法是:经过一段时间的测试、监控,如果某个类的对象数目屡创新高,即使在 JVM Full GC 后仍然数目降不下来,这些对象...

    使用Android Studio检测内存泄露(LeakCanary)

    点击通知可以直接查看泄漏的对象和引用链,极大地简化了内存泄露的诊断过程。 除了上述工具,开发者还应掌握一些基本的内存管理原则,例如: 1. 避免静态变量长时间持有Activity或其他Context相关的对象,因为这...

    详解QT内存泄露问题

    4. **避免过度使用`new`**:尽量减少手动`new`操作,利用Qt提供的智能指针或其他内存管理工具,如`QScopedPointer`和`QSharedPointer`等,这些工具能够自动管理对象的生命周期,减少内存泄露的风险。 #### 实例分析...

    如何解决Java内存泄漏

    然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视无效对象的释放时,可能会导致内存泄漏问题。在实际项目中,内存泄漏不仅会影响系统的性能,还可能导致系统不稳定。因此,了解Java内存泄漏的成因、...

    Iframe内存泄露分析

    1. Circular References:互相引用是最常见的内存泄漏原因,例如在 Internet Explorer 的 COM 基础设施和任何 scripting engine 之间的互相引用,objects 可以泄露内存。 2. Closures:闭包是一种特殊的互相引用,...

    内存泄露的例子

    Java内存主要分为堆内存(Heap)和栈内存(Stack),其中堆内存是用于存储对象实例的,而栈内存则用于存储基本类型和对象引用。当一个对象不再被任何引用指向时,垃圾收集器会自动清理该对象所占用的堆内存。然而,...

    Linux 内存泄露查找

    ### Linux 内存泄露查找详解 #### 一、引言 在进行Linux C语言编程时,内存管理一直是程序员关注的重点之一。特别是在动态内存分配场景下,如果不妥善处理,很容易出现内存泄露的问题。内存泄露不仅会消耗系统资源...

    JProfiler检查内存泄漏

    内存泄漏通常发生在不再使用的对象被其他对象引用,导致垃圾收集器无法回收它们。JProfiler的堆遍历器中的**引用图**是查找内存泄漏的关键工具。通过查看对象到垃圾回收根的引用路径,你可以找到哪些对象阻碍了垃圾...

    C++内存泄露检测器

    智能指针会在适当的时候自动释放所指向的对象,从而避免内存泄漏。程序员可以使用这些智能指针替换原始的裸指针,减少手动管理内存的复杂性。 4. **内存泄漏检测库**:一些第三方库,如LeakSanitizer(部分集成于...

    Lua内存泄露检测工具LuaMonitor下载.rar

    对于使用tolua、xlua或slua等库将C++与Lua结合的项目,内存管理变得更加复杂,因为涉及跨语言的对象引用。LuaMonitor在这种场景下显得尤为重要,它能帮助开发者检查和解决由于C++和Lua交互导致的潜在内存泄露问题。 ...

    Android处理内存泄漏的代码例子

    本示例代码着重展示了如何避免Android应用中的内存泄漏,主要包括五个关键方面:关闭游标、重用适配器、回收图像、注销监听器以及释放引用。下面将详细解释这些方法。 1. 关闭游标: 在Android数据库操作中,游标是...

    memory analyzer 内存泄露

    - 最后,通过分析疑似内存泄露集合,我们可以找到长期持有的对象,追踪其引用链,找出问题的根源。 2. **Tomcat内存泄露检测**: - Tomcat作为广泛使用的Java Web服务器,其内存泄露问题可能源自多个层面,如Web...

    内存泄露Demo leaky app

    4. 注意循环引用:在使用引用计数的系统中,如Objective-C或Swift中的强引用循环,可能导致内存泄露。使用弱引用打破循环可以解决此问题。 在“PropMemFun”这个文件中,可能包含了一些关于内存管理和泄露检测的...

Global site tag (gtag.js) - Google Analytics