我正在根据here的说明使用LinkedHashMap
来实现一个简单的缓存。我使用下面的代码:我可以通过它占用的内存量限制HashMap吗?
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
来修剪缓存,因为那些被清理的方式是不可靠的;它会从虚拟机变成虚拟机,他们可能会很快得到回收,或者他们可能永远不会回收,直到他们填满我的堆。
有没有什么办法让我监视地图的大小和限制?
我很困惑,我将如何评估传入对象的大小?我问的是实际占用的堆空间字节数,而不是对象数。 – 2010-07-28 20:41:24