3 回答

TA貢獻1831條經驗 獲得超10個贊
Java里一般是傳遞引用,
而Map容器里,value也是保存的是引用,也就是一個指針。
Map本身的內存占用其實不是很大。
內存占用情況要按 指針指向的實例進行統計。
也就是那些數據的大小統計。
因為Map是一個值保存對象,讓Map負責保存數據是不合理的設計。
相反應該在 向Map對象寫入數據的地方添加檢查邏輯。
比如
void readData(SomeReader reader) {
Map<String, Object> datamap = new HashMap<String, Object>();
while (null != (Object data = reader.read()) {
String key = extractKey(data);
datamap.put(key, data);
if (datamap.size()>10000) {
storeAndClearMap(datamap);
}
}
}

TA貢獻1898條經驗 獲得超8個贊
apache commons 的org.apache.commons.collections.map.LRUMap可以解決內存溢出,寫到文件這段功能,自己利用LRUMap重寫下

TA貢獻1818條經驗 獲得超7個贊
我說一個思路哈。
你可以自己定義一個put方法,在你的put方法里面首先判斷map的size,每次到了i%100==0的時候就輸出到文件,然后將map置為null,繼續往里面添加數據,然后最后再把剩下的都輸出,類似
myPut(data) {
if(map.size%100==0) {
flushToFile();
}
map.put(data);
}
添加回答
舉報