簡體   English   中英

是否可以使用try-catch語句修補內存泄漏?

[英]Is it possible to patch a memory leak using a try-catch statement?

     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語句對此進行修補?

一般來說,沒有。

但是,我認為我可以看到造成問題的原因。 基本上,tbe循環永遠不會終止。 每次循環時,都會向集合中添加一個新對象。 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));
    }
}

不,這樣做的唯一方法是使catch語句中的某些內容變得無法到達,然后再進行垃圾回收。

在這種情況下,假設.size()方法沒有發生任何意外情況,則內存使用來自所有這些雙精度對象,您可以通過僅將一個Double對象用作靜態常量並添加來獲得巨大的內存改進。將其添加到集合中,或者讓jvm自動為您包裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM