请给出Java中的weakmap的回收例子
时间: 2024-03-14 15:44:12 浏览: 101
数据恢复实例
下面是一个Java中使用WeakHashMap的例子,用于演示WeakHashMap中的键值对会在键不被引用时自动从Map中删除的情况。
```
import java.util.Map;
import java.util.WeakHashMap;
public class WeakHashMapExample {
public static void main(String[] args) {
Map<Key, Value> map = new WeakHashMap<>();
Key key1 = new Key("key1");
Value value1 = new Value("value1");
Key key2 = new Key("key2");
Value value2 = new Value("value2");
map.put(key1, value1);
map.put(key2, value2);
System.out.println("Before gc: " + map);
// 模拟垃圾回收
key1 = null;
System.gc();
// 等待一段时间,以便垃圾回收完成
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("After gc: " + map);
}
static class Key {
private String name;
public Key(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
static class Value {
private String name;
public Value(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
}
```
在上面的例子中,我们创建了一个WeakHashMap,用于存储键值对。我们创建了两个键值对,并将它们放入Map中。然后,我们模拟了一次垃圾回收,并等待一段时间,以便垃圾回收完成。最后,我们打印出Map中的内容,可以看到第一个键值对已经被自动删除了。
这个例子演示了使用WeakHashMap可以避免内存泄漏的情况,同时也展示了WeakHashMap中键值对自动删除的特性。
阅读全文