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);
}
添加回答
举报