[英]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.