if(pCoeff.size()>thisCoeff.size()){
difference=pCoeff.size()-thisCoeff.size();
for(int i=thisCoeff.size(); i<thisCoeff.size()+difference;i++){
thisCoeff.add(i, new Double(0.0)); //this line throws errors
}
}
我已将程序的这一部分隔离为内存泄漏的原因,是否可以使用try catch语句修补此问题?如果是这样,语法是什么?
答案 0 :(得分:4)
是否可以使用try catch语句对其进行修补?
一般来说,没有。
但是,我想我能看出你问题的原因。基本上,循环将永远不会终止。每次循环时,都会向集合中添加一个新对象。这会将thisCoeff.size()
返回的值增加一。以下修复解决了这个问题:
if (pCoeff.size() > thisCoeff.size()) {
difference = pCoeff.size() - thisCoeff.size();
int limit = thisCoeff.size() + difference;
for (int i = thisCoeff.size(); i < limit; i++) {
thisCoeff.add(i, new Double(0.0));
}
}
答案 1 :(得分:0)
不,这样做的唯一方法是在catch语句中使某些内容无法访问,然后再进行垃圾回收。
在这种情况下,假设.size()方法没有做任何意外事件,内存使用来自所有这些双重对象,只需使用一个Double对象作为静态常量就可以获得巨大的内存改进,并将其添加到集合中,或让jvm autobox为您服务。