2012-02-25 48 views
0

我的程序中声明Hashmap的一行触发错误。字符串列表的散列表给我OutOfMemoryError

public class SubjectTeacherPeriod{ 
private int id; 

private Map<String, Integer> num_attribute_map; 
private Map<String,List<String>> str_attribute_map; 

private Period period; 
private List<Period> periodList; 

public SubjectTeacherPeriod(){ 
    num_attribute_map = new HashMap<String, Integer>(); 
    str_attribute_map = new HashMap<String,List<String>>(); //THIS LINE 
} 
.... 

负责:

[email protected]:~/dev/drools/timetabler$ java -server in.co.technovia.timetabler.TimeTableApp 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.HashMap.<init>(HashMap.java:226) 
    at in.co.technovia.timetabler.domain.SubjectTeacherPeriod.<init>(SubjectTeacherPeriod.java:38) 
    at in.co.technovia.timetabler.solution.TimeTableInitializer.createTimeTable(TimeTableInitializer.java:66) 
    at in.co.technovia.timetabler.TimeTableApp.main(TimeTableApp.java:37) 

什么是错我的HashMap的?


更新:就像所有的答案猜测,创造了太多的变数不好的循环变量。这不是hashmap本身的问题。

+0

是否可以复制? – 2012-02-25 12:35:51

回答

3

你的哈希映射没有错。 (它怎么可能?你只是声明/实例化它。)

我的猜测是你正在创建大量的SubjectTeacherPeriod对象,它们基本上用哈希映射来填充内存。最后它再也没有空间了。

1

你可能需要:

  1. 确认你没有分配比实际需要更多的SubjectTeacherPeriod对象。
  2. 增加内存分配池的大小。请参阅java可执行文件的选项-Xmx。