字符串列表的散列图给出了OutOfMemoryError

时间:2012-02-25 12:34:11

标签: java hashmap

我的程序中声明Hashmap的一行会触发错误。

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
}
 ....

负责:

jesvin@Jesvin-Technovia:~/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本身的问题。

3 个答案:

答案 0 :(得分:3)

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

我的猜测是你创建了大量SubjectTeacherPeriod个对象,这些对象基本上用哈希映射填充内存。最后,它没有足够的空间。

答案 1 :(得分:1)

如果它不是应用程序错误,并且您合法地向HashMaps添加了大量数据,请参阅此文章,了解如何增加堆空间。

http://javarevisited.blogspot.com/2011/09/javalangoutofmemoryerror-permgen-space.html

答案 2 :(得分:1)

您可能需要:

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