4、4种引用

4种引用

1、强引用
在一般的Java 程序中,见到最多的就是强引用(strong reference)。如Date date = new
Date(),date 就是一个对象的强引用。

2、软引用(内存不足的时候才会回收)
软引用(soft reference)在强度上弱于强引用,通过类SoftReference来表示。

public class ImageData {
private String path;
private SoftReference<byte[]> dataRef;
public ImageData(String path) {
this.path = path;
dataRef = new SoftReference<byte[]>(new byte[0]);
}
private byte[] readImage() {
return new byte[1024 * 1024]; //省略了读取文件的操作
}
public byte[] getData() {
byte[] dataArray = dataRef.get();
if (dataArray == null || dataArray.length == 0) {
dataArray = readImage();
dataRef = new SoftReference<byte[]>(dataArray);
}
return dataArray;
}
}

3、弱引用(不管内存足不足,都会回收)
弱引用(weak reference)在强度上弱于软引用,通过类WeakReference来 表示。它
的作用是引用一个对象,但是并不阻止该对象被回收。如果使用一个强引用的话,
只要该引用存在,那么被引用的对象是不能被回收的。弱引用则没有这个问题。在
垃圾回收器运行的时候,如果一个对象的所有引用都是弱引用的话,该对象会被回
收。弱引用的作用在于解决强引用所带来的对象之间在存活时间上的耦合关系。弱
引用最常见的用处是在集合类中,尤其在哈希表中。哈希表的接口允许使用任何Java
对象作为键来使用。当一个键值对被放入到哈希表中之后,哈希表 对象本身就有了
对这些键和值对象的引用。如果这种引用是强引用的话,那么只要哈希表对象本身
还存活,其中所包含的键和值对象是不会被回收的。如果某个存活 时间很长的哈希
表中包含的键值对很多,最终就有可能消耗掉JVM中全部的内存。
对于这种情况的解决办法就是使用弱引用来引用这些对象,这样哈希表中的键和值
对象都能被垃圾回收。Java中提供了WeakHashMap来满足这一常见需求。

猜你喜欢

转载自www.cnblogs.com/yeyongjian/p/9246300.html
今日推荐