加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在大型Java项目中处理内存泄漏的最佳做法?

发布时间:2020-12-15 00:48:09 所属栏目:Java 来源:网络整理
导读:在我参与的几乎所有更大的 Java项目中,我注意到应用程序的服务质量随着容器的正常运行时间而降低.这最有可能是因为代码中的内存泄漏. 解决这个问题的正确方法显然是追溯到问题的根本原因,并修复代码中的泄漏.解决问题的快速而肮脏的方法只是重新启动Tomcat(
在我参与的几乎所有更大的 Java项目中,我注意到应用程序的服务质量随着容器的正常运行时间而降低.这最有可能是因为代码中的内存泄漏.

解决这个问题的正确方法显然是追溯到问题的根本原因,并修复代码中的泄漏.解决问题的快速而肮脏的方法只是重新启动Tomcat(或者您正在使用的任何servlet容器).

这是我的三个问题:

>假设您通过跟踪问题的根本原因(内存泄漏)来选择解决问题,您将如何收集数据来放大问题?
假设您选择快速而肮脏的方式,只需重新启动容器即可,您将如何收集数据以选择最佳重启循环?
>您是否能够在长时间内部署和运行项目,而无需重新启动servlet容器来重新获得缓冲?或者偶尔的servlet重新启动一个人必须简单地接受的东西?

解决方法

Assume that you choose to solve the problem by tracing the root cause of the problem (the memory leaks),how would you collect data to zoom in on the problem?

使用jmap进行堆转储,并使用Eclipse Memory Analyzer加载转储.从那里可以分析哪些对象正在吃掉最多的内存,哪些“根”阻止其他对象被收集等.

还有其他堆分析程序,如jhat,但我发现EMA是最快最好的(免费)解决方案.

Assume that you choose the quick and dirty way of speeding things up by simply restarting the container,how would you collect data to choose the optimal restart cycle?

使用JMX监视堆大小和其他堆和GC统计信息.

Have you been able to deploy and run projects over an extended period of time without ever restarting the servlet container to regain snappiness?

是.通过避免/修复内存泄漏.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读