我正在根據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