2010-10-20 76 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爲您服務。