我的程序中声明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本身的问题。
答案 0 :(得分:3)
哈希映射没有问题。 (怎么可能?你只是声明它/实例化它。)
我的猜测是你创建了大量SubjectTeacherPeriod
个对象,这些对象基本上用哈希映射填充内存。最后,它没有足够的空间。
答案 1 :(得分:1)
如果它不是应用程序错误,并且您合法地向HashMaps添加了大量数据,请参阅此文章,了解如何增加堆空间。
http://javarevisited.blogspot.com/2011/09/javalangoutofmemoryerror-permgen-space.html
答案 2 :(得分:1)
您可能需要:
SubjectTeacherPeriod
个对象。