我以为我无意中用我的代码引入了内存泄漏,但在用VisualVM检查后,我看到了一个不同的故事:
VisualVM显示堆占用大约一GB的RAM,这就是我用CATALINA_OPTS =“ – Xms256m -Xmx1024”设置的.
根据VisualVM的说法,为什么我的系统认为这个过程占用了大量的内存,它几乎没有占用任何内容?
经过一番进一步的嗅探,我注意到如果在应用程序中同时运行多个作业,则内存不会被释放.但是,如果我在将另一个作业提交给由ExecutorService提供服务的BlockingQueue之前等待每个作业完成,那么内存将被有效地回收.我该怎么调试呢?为什么垃圾收集/内存重用会有所不同?
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/java-jvmneicunshiyongshikong.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 23, 2019 at 10:26 下午