【发布时间】:2010-07-28 20:17:07
【问题描述】:
我正在根据here 找到的指令使用LinkedHashMap 实现一个简单的缓存。我使用以下代码:
public class Cache extends LinkedHashMap {
private final int capacity;
public Cache(int capacity) {
super(capacity + 1, 1.1f, true);
this.capacity = capacity;
}
protected boolean removeEldestEntry(Entry eldest) {
return size() > capacity;
}
}
这很容易。然而,它只是在地图上强加了一个固定的大小。我在一个非常小的堆上运行,根据缓存对象的大小和我选择的容量,这仍然可能会耗尽内存。这些对象是任意的,所以我无法估计它们可能有多大。我不想依赖SoftReferences 来修剪缓存,因为清理缓存的方式不可靠;它会从 VM 更改为 VM,它们可能会过早地被回收,或者它们可能永远不会被回收,直到它们填满我的堆。
我有什么方法可以监控地图的大小并以此为基础进行约束吗?
【问题讨论】:
标签: java memory-management caching