Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 垃圾收集器对象的内存泄漏_Java_Memory Leaks_Garbage Collection - Fatal编程技术网

Java 垃圾收集器对象的内存泄漏

Java 垃圾收集器对象的内存泄漏,java,memory-leaks,garbage-collection,Java,Memory Leaks,Garbage Collection,我的应用程序中存在严重的内存泄漏。我已经运行了jmap,它说当前有以下对象不应该存在(并且是泄漏的主要来源): 我不直接使用这些对象。然而,它们被垃圾收集器使用。 我使用: 我使用当前并发的低暂停垃圾收集器。但是,即使在运行吞吐量收集器时,我也遇到了同样的问题 你知道为什么这些物体会留在记忆里吗?你建议做什么 更新:Java 1.7更新1(1.7.0_01-b08,Java Hotspot(TM)64位服务器虚拟机(build 21.1-b02,混合模式))仍会发生内存泄漏 更新2:内存泄漏是由

我的应用程序中存在严重的内存泄漏。我已经运行了jmap,它说当前有以下对象不应该存在(并且是泄漏的主要来源):

我不直接使用这些对象。然而,它们被垃圾收集器使用。 我使用:

我使用当前并发的低暂停垃圾收集器。但是,即使在运行吞吐量收集器时,我也遇到了同样的问题

你知道为什么这些物体会留在记忆里吗?你建议做什么

更新:Java 1.7更新1(1.7.0_01-b08,Java Hotspot(TM)64位服务器虚拟机(build 21.1-b02,混合模式))仍会发生内存泄漏


更新2:内存泄漏是由JConsole引起的。在JConosole启动之前,没有上述类的实例。一旦我使用JConsole连接到应用程序,对象就会开始出现在内存中,并且永远保持在内存中。关闭JConsole后,对象仍在内存中,并且在应用程序关闭之前,对象的数量一直在增长。

我没有真正使用jmap,但我已经处理了应用程序中的内存泄漏问题

您的应用程序是否内存不足?我建议在应用程序关闭之前转储,将以下内容添加到您的vm参数


-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/tmp

当您的应用程序启动oom时,它将在tmp下创建一个hprof文件,您可以使用该文件调试问题

如果没有OOM,请尝试分配较低的内存,以便强制OOM


我曾经分析过这些文件。这非常好,因为它会立即告诉您泄漏的嫌疑犯。

我没有真正使用jmap,但我在应用程序中处理过内存泄漏

您的应用程序是否内存不足?我建议在应用程序关闭之前转储,将以下内容添加到您的vm参数


-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/tmp

当您的应用程序启动oom时,它将在tmp下创建一个hprof文件,您可以使用该文件调试问题

如果没有OOM,请尝试分配较低的内存,以便强制OOM


我曾经分析过这些文件。这非常好,因为它会立即告诉您泄漏的嫌疑犯。

我认为您需要提供更多关于该应用程序的用途和功能的详细信息。您只是在使用jConsole来跟踪这个问题吗


我使用VisualVM跟踪这些类型的问题。有关如何将其用于内存泄漏,以及如何将其用于Visual VM main,请参见此部分。

我认为您需要提供更多有关该应用程序的用途和功能的详细信息。您只是在使用jConsole来跟踪这个问题吗


我使用VisualVM跟踪这些类型的问题。有关如何将其用于内存泄漏,以及如何将其用于Visual VM main,请参见此部分。

我也有同样的问题。我在两个月前做了调查,问题出在JAVA 7_0虚拟机上。在我的场景中,java.lang.management.MemoryUsage对象挂起,每天增长数百MB。您看到挂起的所有其他对象都由java.lang.management.MemoryUsage对象引用。问题是,这个MemoryUsage对象仅在java 7_0及更高版本中挂起,因为这个MemoryUsage类已经添加到java 7中,而在以前的java中从未出现过。最重要的是,只有在我使用JConsole连接到服务器之后,这个MemoryUsage类才会挂起在内存中。在JConsole第一次连接之后,它创建一些MemorySage跟踪机制,开始创建MemorySage对象。然后使用这些对象在JConsole中绘制漂亮的图形。这一切都好。但是,问题是,Java7有缺陷,永远不会释放内存。MemoryUsage对象永远挂在堆上。关闭JConsole并不重要,它将在以后继续增长。第一次使用JConsole连接到JAVA 7_0进程时,就产生了问题,没有解决方案。只是不要使用Jconsole或任何其他内存监控工具,或者不要使用Java7。在我的场景中,我注定要失败,因为我必须一直使用Jconsole,而JAVA 6对我来说是没有选择的,因为还有另一个bug,由于锁定对象而导致内存泄漏。我向甲骨文报告了这个错误,但我不知道,如果他们得到了它,知道它,并且正在解决它。我只是在等待更新版本的java,以便每隔几天就可以测试它并停止重新启动服务器。

我也有同样的问题。我在两个月前做了调查,问题出在JAVA 7_0虚拟机上。在我的场景中,java.lang.management.MemoryUsage对象挂起,每天增长数百MB。您看到挂起的所有其他对象都由java.lang.management.MemoryUsage对象引用。问题是,这个MemoryUsage对象仅在java 7_0及更高版本中挂起,因为这个MemoryUsage类已经添加到java 7中,而在以前的java中从未出现过。最重要的是,只有在我使用JConsole连接到服务器之后,这个MemoryUsage类才会挂起在内存中。在JConsole第一次连接之后,它创建一些MemorySage跟踪机制,开始创建MemorySage对象。然后使用这些对象在JConsole中绘制漂亮的图形。这一切都好。但是,问题是,Java7有缺陷,永远不会释放内存。MemoryUsage对象永远挂在堆上。关闭JConsole并不重要,它将在以后继续增长。第一次使用JConsole连接到JAVA 7_0进程时,就产生了问题,没有解决方案。只是不要使用Jconsole或任何其他内存监控工具,或者不要使用Java7。在我的场景中,我注定要失败,因为我必须一直使用Jconsole,而JAVA 6对我来说是没有选择的,因为还有另一个bug,由于锁定对象而导致内存泄漏。我报告了这个错误
java.lang.management.MemoryUsage - 3938500 instances, 189048000 bytes
[Ljava.lang.management.MemoryUsage - 787700 instances, 31508000 bytes
com.sun.management.GCInfo - 293850 instances, 22055600 bytes
sun.management.GCInfoCompositeData - 393850 instances, 12603200 bytes
Java version: 1.7.0-b147
VM version: Java Hotspot(TM) 64-bit Server VM (build 21.0-b17, mixed mode)
The application is run in Jetty version 7.3.1