检测 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 循环并因此结束线程。