我有以下循环来监听传入的 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/