检测 Java 线程中的内存泄漏
Detecting memory leak in Java thread
我正在开发一个可运行的程序,它从系统流中读取输入并分析传入的字符串,该程序运行良好几天然后停止运行,我猜这可能是由于内存泄漏在我的线程中,但我似乎找不到它,任何人都可以建议我的代码是否有问题。
@Override
public void run() {
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
try {
String inputStr;
if ((inputStr = bufReader.readLine()) != null) {
//do something
} else {
break;
}
} catch (Exception e) {
System.out.println(e);
}
}
}
将 bufReader 更改为此
InputStreamReader iSR = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(iSR);
然后像这样关闭它们:
bufReader.close();
iSR.close();
注意:如果存在内存泄漏问题,则为与您相关的答案。
如果通过批量重定向提供标准输入,EOF 将导致程序执行 break
,退出 while
循环并因此结束线程。
我正在开发一个可运行的程序,它从系统流中读取输入并分析传入的字符串,该程序运行良好几天然后停止运行,我猜这可能是由于内存泄漏在我的线程中,但我似乎找不到它,任何人都可以建议我的代码是否有问题。
@Override
public void run() {
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
try {
String inputStr;
if ((inputStr = bufReader.readLine()) != null) {
//do something
} else {
break;
}
} catch (Exception e) {
System.out.println(e);
}
}
}
将 bufReader 更改为此
InputStreamReader iSR = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(iSR);
然后像这样关闭它们:
bufReader.close();
iSR.close();
注意:如果存在内存泄漏问题,则为与您相关的答案。
如果通过批量重定向提供标准输入,EOF 将导致程序执行 break
,退出 while
循环并因此结束线程。