错误:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_31]
at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_31]
at java.util.ArrayList.grow(Unknown Source) ~[?:1.8.0_31]
at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) ~[?:1.8.0_31]
at java.util.ArrayList.ensureCapacityInternal(Unknown Source) ~[?:1.8.0_31]
at java.util.ArrayList.add(Unknown Source) ~[?:1.8.0_31]
at mcs.controllers.StatsController$PatenteController.loadPatentes(StatsController.java:116) ~[?:?]
我的代码:
private List<Patente> patentes = new ArrayList<>();
int exp = 301;
for(int i=0; i<patentes.size(); i++) {
if(exp<patentes.get(i).getRequiredEXP()) {
patentes.add(i, pat); //Line 116 (where the error occurs)
} else {
x=i+1;
}
}
服务器保持静止一段时间,此错误发生后不久。
答案 0 :(得分:1)
只要满足条件exp<patentes.get(i).getRequiredEXP()
,此代码就会创建一个无限大的列表,因为patentes.add(i , pat)
会将先前位于i
的元素推送到位置i + 1
,因此条件将再次在循环的下一步中完成。循环运行直到i
到达patentes.size()
,每次添加新元素时,该循环将增加1。因此,您创建了一个向列表添加元素的无限循环。由于java只有有限的内存,因此抛出OutOfMemoryException
。