面试题答案
一键面试1. 使用Java弱引用构建简单缓存机制
在Java中,WeakReference
类可用于实现弱引用。以下是使用弱引用构建简单缓存机制的步骤:
添加缓存对象
- 创建缓存容器:
通常使用
Map
来存储缓存数据,键为缓存对象的标识,值为WeakReference
指向实际的缓存对象。import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; public class WeakCache { private Map<String, WeakReference<Object>> cache = new HashMap<>(); public void put(String key, Object value) { cache.put(key, new WeakReference<>(value)); } }
获取缓存对象
- 从缓存中获取对象:
从
Map
中获取WeakReference
,然后通过WeakReference.get()
方法获取实际的缓存对象。需要注意的是,由于是弱引用,对象可能已经被垃圾回收,所以get()
方法可能返回null
。public Object get(String key) { WeakReference<Object> weakReference = cache.get(key); return weakReference == null? null : weakReference.get(); }
垃圾回收时缓存对象的处理逻辑
- 垃圾回收处理:
当没有强引用指向缓存对象时,垃圾回收器会在适当的时候回收该对象。此时,
WeakReference
指向的对象变为null
。在下次获取缓存对象时,通过WeakReference.get()
方法返回null
,表示缓存对象已被回收。 例如,假设在某个地方有以下代码:WeakCache cache = new WeakCache(); Object largeObject = new Object(); cache.put("key1", largeObject); largeObject = null; // 移除对largeObject的强引用 // 当垃圾回收器运行时,largeObject可能会被回收 Object retrievedObject = cache.get("key1"); if (retrievedObject == null) { System.out.println("缓存对象已被垃圾回收"); }
通过上述步骤,就可以使用Java的弱引用构建一个简单的缓存机制,在一定程度上避免内存泄漏。