2010-10-20 74 views
0
 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语句对此进行修补?如果是这样,语法是什么?是否可以使用try-catch语句修补内存泄漏?

+0

这是如何泄漏内存? – 2010-10-20 03:23:35

+0

我的程序在线程“main”中抛出异常java.lang.OutOfMemoryError:Java堆空间。程序的要点是取两个系数存储在数组列表中的多项式并将多项式加在一起。这部分代码应该比较两个数组列表并添加到最短的列表中,以使它们具有相同的大小。 – user481211 2010-10-20 03:30:34

回答

4

is it possible to patch this using a try catch statement?

一般来说,没有。

但是,我想我可以看到你的问题的原因。基本上,循环将永远不会终止。每次循环时,都会向集合中添加一个新对象。这会将thisCoeff.size()返回的值增加1。以下修补程序解决此:

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)); 
    } 
} 
+0

现在完美,谢谢。 – user481211 2010-10-20 03:36:14

+0

@ user481211请接受这个答案然后(点击勾号)。 – 2010-10-20 04:04:25

0

不行,要做到这一点的唯一方法是有东西在catch语句变得不可比就可以被垃圾收集。

在这种情况下,假设.size()方法不会做任何意想不到的事情,内存使用来自所有这些双重对象,您可以通过仅使用一个Double对象作为静态常量,并将其添加到集合中,或者让jvm autobox为您服务。