最近我通过了Adobe Systems的采访流程。他们问我的一个问题是: - “有一个J2EE应用程序,该应用程序中存在内存泄漏,我们没有应用程序的源代码,因此你怎么能找到内存泄漏”
那时我很无能,所以我说: - “有许多第三方工具,即有一个与eclipse集成的工具以及更多。我不知道这些工具的机制。”我仍在寻找答案。 谢谢
答案 0 :(得分:1)
你是对的有很多像visualvm,jmeter这样的工具。他们简单地做的就是挂钩运行jvm并收集数据,就像你只需要使用jstat
或heapdump一样获得Threaddumps,这些工具只是花哨的数据分析器并提供可视化,引擎盖下的所有东西都在{{1和} heapdump
可以告诉你内存泄漏。
答案 1 :(得分:1)
在JDK文件夹中,查看/ bin并找到“jvisualvm.exe”(Java VisualVM)并双击。它将扫描机器进程以查找当前正在运行的任何Java,并允许您开始监视其内存使用情况(包括其自身!)。界面非常直观,所以你应该弄清楚如何快速使用它。
很高兴看到一个免费的实用工具船上有一个免费的应用程序开发工具包,不是全部但是没用...事实上,这个帮助我在一个地方追踪地方很多大型,数据密集型项目代码库,我真的需要在特定时间执行System.gc()以保证我需要> 1 GB的内存。 (与宗教信仰相反,运行System.gc()实际上是一个非常合理的事情,当你需要尽快释放所需的内存时。)以前,我在错误的时间里吹掉堆空间(并且没有时间这样做),但是这个实用程序帮助我找到了我的代码中最让人感到内疚的地方,所以我可以阻止它发生。
编辑:2年后,我想补充如下。我自己没有使用引用的JVM开关来追踪内存泄漏,但是我希望分享这些信息b / c它可以帮助其他人。在:http://javarevisited.blogspot.com/2011/11/hotspot-jvm-options-java-examples.html
引用:'8)跟踪类加载和卸载的JVM参数 -XX:+ TraceClassLoading和-XX:+ TraceClassUnloading是两个JVM选项,我们用它们在类加载到JVM或从JVM卸载时打印日志信息。如果您有任何与类加载器相关的内存泄漏,或者怀疑类没有卸载或垃圾回收,那么这些JVM标志非常有用。'