java的内存泄露

如果一个没用的引用,到另一个无用对象的引用一直没有被删除,java中是会出现内存泄露的情况。

比如一个方法已经执行了很长时间,或者是死循环,那么这个方法的局部变量保留的对象引用就可能比对他们的实际需要要长的多。

比如:

public static void main(String[] args) {
		int[] array = new int[10000];
		
		int x = doSomething1(array);  //某个方法对数组进行引用
		
		/*
		 * 上面的语句执行完之后,我们不再需要数组array了
		 * 正常情况下,该数组占用的内存应该被回收,可是,
		 * 这个array又是一个局部变量,所以该方法(doSomething1())没有返回前,
		 * 它一直指向这个数组,我们可以发现这个方法不会返回,
		 * 因为它在一个死循环里被调用,所以我们只能是显示的撤销这个引用,array = null;
		 * 只有这样,垃圾收集器才能知道它可以回收这个array数组
		 * */
		array = null;
		
		for(;;){
			doSomething2(x);  //某个方法对x引用
		}
	}

当用散列表或者类似的数据结构在对象之间相互关联时,也可能发生内存泄露,即使当不再需要所有这些对象时,这些对象之间的关联在

散列表中仍然是存在的,这样就只有当散列表本身被回收时,这些对象才能被回收,如果散列表的生命周期比它所包含的对象的生命周期长,

那么就一定会导致内存泄露


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值