java程序过度消耗内存

时间:2013-03-10 15:13:46

标签: java string performance

我有以下程序创建哈希映射。

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的堆显然是错误的实现。

2 个答案:

答案 0 :(得分:1)

在堆填满之前,Java不会进行垃圾收集。这种内存消耗不是问题。

尝试锁定主线程(例如,调用(new Object()).wait(),JMX,执行垃圾收集然后堆转储,您的消费看起来会更好。

答案 1 :(得分:0)

我认为你可以把

System.gc()

在循环结束时强制垃圾收集,但我不确定它会帮助