带有定期中断的java while循环收到内存不足异常

标签 java loops memory-leaks out-of-memory infinite-loop

我有以下循环来监听传入的 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 boolean 值没有执行任何操作。尽管您将 loopRecv 设置为 false,但您会立即进行递归调用,从而使 boolean 赋值变得无用!因此,出现了 StackOverflowError。相反,为什么不找到一种方法来迭代地实现你的方法呢?考虑打破 label 。目前还不清楚你的函数完成了什么。

关于带有定期中断的java while循环收到内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244617/

相关文章:

java - 使用 MongoDB 访问数据的 Spring 示例..我如何告诉它 MongoDB 服务器

java - 如何找到用户输入数字字符串的所有奇数位的总和?

c# - 如何解决私有(private)字节( native 内存)泄漏?

通过运行时对象与任务管理器输出 Java 内存使用情况

java - 是否可以创建 ByteArrays 的 ByteArray 作为 kotlin 中的元素?

java - 关闭应用程序时广播接收器不工作

java - 如何在执行 HTTP post 时处理屏幕旋转?

c# - asp.net mvc razor foreach循环将id添加到div

php变量导致while循环无限循环显示数据

c# - 保存位图时内存泄漏?