旧应用程序的Java内存泄漏

旧应用程序的Java内存泄漏,java,memory-leaks,out-of-memory,Java,Memory Leaks,Out Of Memory,对于我正在使用的一个旧java应用程序,我遇到了内存不足异常,是否有任何工具可以帮助我找出应用程序的哪个部分导致了内存不足异常 大多数工具似乎都是为基于web的java应用程序而构建的 我的应用程序不是一个基于web的应用程序,因此没有创建WAR文件和EAR文件,然后在这些文件上运行内存泄漏工具的奢侈 有人知道这种应用程序的工具吗?如果可以修改JVM启动参数,让它在OutOfMemory上转储一个堆文件,并使用Eclipse的。热点JVM的参数是-XX:-HeapDumpOnOutOfMemor

对于我正在使用的一个旧java应用程序,我遇到了内存不足异常,是否有任何工具可以帮助我找出应用程序的哪个部分导致了内存不足异常

大多数工具似乎都是为基于web的java应用程序而构建的

我的应用程序不是一个基于web的应用程序,因此没有创建WAR文件和EAR文件,然后在这些文件上运行内存泄漏工具的奢侈


有人知道这种应用程序的工具吗?

如果可以修改JVM启动参数,让它在OutOfMemory上转储一个堆文件,并使用Eclipse的。热点JVM的参数是
-XX:-HeapDumpOnOutOfMemoryError
。要指定此文件的位置,请使用
-XX:HeapDumpPath=

如果可以修改JVM启动参数,让它在OutOfMemory上转储堆文件,并使用Eclipse的。热点JVM的参数是
-XX:-HeapDumpOnOutOfMemoryError
。要指定此文件的位置,请使用
-XX:HeapDumpPath=

可以尝试的另一个工具是。它旨在查找任何基于java的应用程序中的内存泄漏。

您可以尝试的另一个工具是。它的目的是在任何基于java的应用程序中查找内存泄漏。

是最好的选择!试试看!甚至还有一些简单的教程。但是你必须购买工具

是最好的工具!试试看!甚至还有一些简单的教程。但是您必须购买JDK附带的一些基本工具:

  • jps-l:获取Java进程的PID。那么
  • jmap-histo:live:按类获取数字和内存使用情况,这样您就可以发现哪个更可能导致内存泄漏
您还可以使用HPROF,一种嵌入JVM中的探查器。非常容易使用,无需更改代码,只需几个命令行选项。有关用法,请参阅。
您可以“手动”阅读hprof的日志,或者使用诸如HPJmeter(不是ApacheJMeter)之类的工具来绘制漂亮的图形等等。任何商业分析器都可以处理HPROF的输出。

JDK附带的一些基本工具:

  • jps-l:获取Java进程的PID。那么
  • jmap-histo:live:按类获取数字和内存使用情况,这样您就可以发现哪个更可能导致内存泄漏
您还可以使用HPROF,一种嵌入JVM中的探查器。非常容易使用,无需更改代码,只需几个命令行选项。有关用法,请参阅。
您可以“手动”阅读hprof的日志,或者使用诸如HPJmeter(不是ApacheJMeter)之类的工具来绘制漂亮的图形等等。任何商业分析器都可以处理HPROF的输出。

JVisualVM是一个非常好的分析工具,包含在Java发行版中。不错,以前用过,发现了我的问题。我可能会首先尝试使用JVisualVM,因为堆栈跟踪是一个很好的起点。您可能只是尝试一个巨大的本地分配,而不是遇到一个泄漏的保留对象……JVisualVM是一个非常好的分析工具,并且包含在Java发行版中。不错,以前用过,发现了我的问题。我可能会首先尝试使用JVisualVM,因为堆栈跟踪是一个很好的起点。您可能只是在尝试一个巨大的本地分配,而不是遇到一个泄漏的保留对象……将HeapDumpPath arg添加到您的答案中,它会变得非常漂亮。很好,我相信默认设置是将
java-.hprof
文件放在应用程序运行的目录中。将HeapDumpPath参数添加到您的答案中,它会变得非常漂亮。好的一点,我相信默认设置是将
java-.hprof
文件放在应用程序运行的目录中。。。我可以知道投票失败的原因吗?这样我就可以理解我的错误了。。。我可以知道投否决票的原因吗?这样我就可以理解我的错误了?