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

本文通过一个简单的栈实现案例,展示了如何因为对象引用未正确清理而导致内存泄漏。文章强调了当对象不再使用时,应清除其引用的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存泄漏:应用程序中保留了从不会再被使用的引用,引用未被释放,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,
最后一个为不再使用元素,但引用被保留在数组中,未被释放.
[color=red]总结:一个类自己管理内存,就应该小心内存泄漏的问题了;一但一个元素被释放了,则该元素中包含的任何对象引用应该要被清空.[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值