我使用以下方法来查找Java中的内存泄漏。我使用jProfiler取得了巨大的成功,但是我相信任何具有图形功能的专业工具(差异更容易以图形形式进行分析)都可以使用。
- 当所有初始化完成且应用程序处于空闲状态时,启动应用程序并等待其进入“稳定”状态。
- 多次运行怀疑会导致内存泄漏的操作,以允许发生任何与数据库相关的高速缓存。
- 运行GC并获取内存快照。
- 再次运行该操作。根据操作的复杂性和已处理数据的大小,可能需要运行几次到很多次。
- 运行GC并获取内存快照。
- 对2个快照运行差异并进行分析。
基本上,分析应该从最大的正差异开始,例如,对象类型,并找出导致这些额外对象滞留在内存中的原因。
对于在多个线程中处理请求的Web应用程序,分析变得更加复杂,但是仍然可以使用常规方法。
我做了很多专为减少应用程序的内存占用量的项目,并且这种通过一些特定于应用程序的调整和技巧的通用方法始终可以很好地工作。



