我有以下程序创建哈希映射。
public class sample {
private HashMap<String, String> joindata = new HashMap<String, String>();
public void map()
throws IOException{
BufferedReader reader = new BufferedReader(new FileReader("/tmp/table2"));
String line;
String[] tokens;
while ((line = reader.readLine()) != null)
{
tokens = line.split(",");
if(tokens.length == 2)
joindata.put(tokens[0], tokens[1]);
}
}
}
这个实现中似乎有一些错误,因为当我拿一个32M的文件(/ tmp / table2)来读取时,我的堆达到了300M。
任何人都可以建议我可以做的优化来减少堆大小,300M的堆显然是错误的实现。
答案 0 :(得分:1)
在堆填满之前,Java不会进行垃圾收集。这种内存消耗不是问题。
尝试锁定主线程(例如,调用(new Object()).wait()
,JMX,执行垃圾收集然后堆转储,您的消费看起来会更好。
答案 1 :(得分:0)
我认为你可以把
System.gc()
在循环结束时强制垃圾收集,但我不确定它会帮助