簡體   English   中英

周期性中斷的java while循環收到內存不足異常

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

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