繁体   English   中英

使用ScheduledExecutorService的Java内存泄漏

[英]Java Memory Leak with ScheduledExecutorService

有人可以解释为什么以下代码导致内存泄漏?

从~27 MB开始:

#循环| MB消费

  • 400 .... | 44
  • 800 .... | 60
  • 1200 .. | 77
  • 1600 .. | 99
  • 2000 .. | 99
  • 3000 .. | 116,0
  • 4000 .. | 116,4
  • 5000 .. | 124
// ------------------------------
// executer service     

ScheduledExecutorService $exec = Executors.newSingleThreadScheduledExecutor();   
$exec.scheduleAtFixedRate(new Runnable()
{        
    @Override
    public void run(){

    try{

    Process $p = Runtime.getRuntime().exec("tasklist /fi \"Imagename eq mspaint.exe\"");
    InputStreamReader $ir = new InputStreamReader($p.getInputStream());
    BufferedReader $br = new BufferedReader($ir);

    String $line = $br.readLine();

    while($line != null){
            System.out.println($line);
            $line = $br.readLine();
    }

    $line = null;

    $br.close();
    $br = null;

    $ir.close();
    $ir = null;

    $p = null;

    }catch(IOException $ex){System.out.println("Error" + $ex);}
    }// run() end
} /* runnable object end */, 0, 50, TimeUnit.MILLISECONDS);

// ------------------------------

你没有正确清理这个过程。 这可能会导致内存泄漏。 您需要在进程运行时(可能并行)清除标准错误和标准输出。 这并不简单,API也不是最好的。

有关详细信息,请参阅示例或javadocs

最后,让我补充一点来实际解决明显的泄漏,你最好使用像Memory Analyzer这样的工具,它会为你找到潜在的泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM