[英]java infinite loop calling datainputstream receives out of memory exception
[英]java while loop with periodic break receives out of memory exception
我有以下循環,偵聽傳入的UDP消息
public void run(){
int count = 0;
boolean loopRecv = true;
while (loopRecv) {
count++;
if (count == 500) {
loopRecv = false;
System.out.println("break from loop");
count = 0;
}
}
}
問題是在幾個小時內,我收到了內存不足的異常。 另外,我正在監視Top中的內存,並且內存增長緩慢。
我以為打破這個循環會刪除分配的堆棧幀,但事實並非如此。
如何在不收到內存不足錯誤的情況下運行此循環?
while循環的每500次迭代都會調用run
。
run()
.
. 500 iterations
.
run()
.
.
. 500 iterations
.
run()
您的loopRecv
布爾不執行任何操作。 盡管將loopRecv
設置為false,但是您會立即進行遞歸調用,從而使布爾分配無效! 因此, StackOverflowError
。 相反,為什么不找到一種迭代地實現方法的方法呢? 考慮打破標簽 。 還不清楚您的功能完成了什么。
您在每次count == 500時都遞歸地調用該方法。這會減慢StackOverflowError的速度,但仍然會發生。
從while循環內部刪除對run()的調用,它不再出錯。
常見的StackOverFolow錯誤帶有一個無限遞歸循環,該循環沒有終端並且會連續調用自己,在這種情況下,即使條件為true,您也會連續調用run ()
,因此,如果您在while循環中聲明斷點,則不會得到錯誤。
我有興趣問為什么在條件為真后為什么要調用run ()
? 是有趣的事情還是您有目的?
問題是我在運行之前打開了數據庫連接,而沒有關閉它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.