内存泄露

javaVM虽然有自己的垃圾回收器,可以回收大部分的内存空间,但还是有部分的内存空间是回收不了的.

内存中饿对象分为3种:
1.无用的对象,但是不可达,这是C或C++中的内存泄露;
2.无用的对象,也可达,这就是java中的内存泄露;
3.有用的对象.这就不是内存泄露了.

为什么java中也会存在内存泄露呢,什么情况下会出现这种情况,下面是一个比较普遍的例子:
List list = new ArrayList();
for (int i = 0; i < 1000; i++) {
list.add(i);
}
for (int i = 0; i < 1000; i++) {
list.remove(i);
}

当集合或者数组(本质上是栈)加入了很多数据后,又将这些数据删除,集合或数组仍然会保留着一些信息来记录它们,所以导致GC不会把它们删除,这就是导致内存泄露的原因.

解决方案就是:
list.get[i]=null

一般内存泄露是很难发现的,所以它很可能长久地存在于系统中,而没有被发现,但可以通过工具来发现它,比如bea的JRocket,IBM的Purify等等,都不错.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值