第六条:消除过期的引用变量

为什么要消除过期的引用变量:

因为JAVA是用垃圾收集机制回收内存的。

当只有在变量未被任何类使用的情况下才会被回收。但是当我们编写程序的时候,往往会无意识的保持对象。

导致垃圾回收机制无法回收,引发内存泄漏。

一、未消除引用变量的例子

用数组创建栈。

public class Stack {
	private static final int SIZE = 16;
	private static final Test [] STACK = new Test[SIZE];
	private static int loc = 0;
	
	public void add(Test data){
		STACK[loc] = data;
		++loc;
	}
	
	public Test pop(){
		Test data = STACK[loc];
		--loc;
		return data;
	}
}
问题在pop()方法中,当出栈的时候我们获取的test实例,并返回。但是其实Test的引用还保留在STACK数组中。

保留在STACK数组中的变量称为过期变量。数组会保持这种过期变量。导致垃圾回收机制无法回收。

二、解决办法。

不让数组持有该变量的引用。

所以就是加上

STACK[loc] = null;//让引用清零。


三、常见的内存泄漏问题

将数据放到缓存中。然后缓存的数据不再被使用。导致缓存无法被回收,导致泄漏。

如果缓存的生命周期是根据其键值来的那么就可以使用WeakHashMap。

WeakHashMap:当key被回收的时候,那么它的value也会被回收。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值