是否可以使用try-catch语句修补内存泄漏?

时间:2010-10-20 03:20:00

标签: java memory-leaks arraylist try-catch patch

     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语句修补此问题?如果是这样,语法是什么?

2 个答案:

答案 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为您服务。