java - 查找 jvm 8 中内存使用过多的原因

标签 java debugging memory-leaks jvm java-8

我的实际问题是,目前 netbeans 使用了大约 4G(根据 OS X 上的 Activity 监视器)内存。我设置了几个内存限制选项,但没有效果。来 self 的 netbeans.conf

netbeans_default_options="-J-client -J-Xmx1G -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxMetaspaceSize=256m -J-XX:+UseConcMarkSweepGC -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"

我想知道的是如何找出它使用这么多内存的原因?我应该采取什么步骤来确定问题的根源。

(我对通用的比特定的 netbeans 更感兴趣)。可能值得注意的是,我只进行了几个月的 Java 编程,并且不知道可用于此目的的工具,或者我应该检查哪些内容。 (例如,我今天添加了 MaxMetaspaceSize,因为我意识到这并没有受到限制,认为可能就是这样,但我仍然不确定如何检查)。

以下是我从 VisualVM 堆转储中发现的一些内容

  File size: 364.7 MB      Total bytes: 332,921,516     Total classes: 24,143     Total instances: 4,151,139     Classloaders: 3,272     GC roots: 65,185     Number of objects pending for finalization: 0 

它的元空间图显示它为堆保留了大约 600M,为元空间保留了 150M。当时 Activity 监视器显示大约 2G 内存使用情况。我想要弄清楚的是,额外的 1G 内存使用情况在哪里。如果再多几百兆字节还可以忍受,但是 2-4G 的 RAM 是系统内存的一半(还要注意的是,在我的 Linux 机器上,具有相同版本时,它不会以这种方式运行)。我认为 800M-2G 之间的任何地方对于 java IDE 来说可能都是正常的,并且是可以忍受的,我不会调查,就是这样,使用剩余的可用内存,没有任何明显的原因让我想要看看到底是什么,以及为什么要保留这个。

Activity Monitor and visual VM numbers not adding up

更新:这是 Memory leak in Swing on OS X in JVM 8 我无法真正接受无法让我在 jdk 8 中找到问题原因的答案。

最佳答案

JDK 附带了工具。运行 %JAVA_HOME%\bin\jvisualvm.exe 并检查您的实例。您应该能够执行堆转储并分析使用情况。

关于java - 查找 jvm 8 中内存使用过多的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436353/

相关文章:

java - 针对 XSD 验证 csv

java - Eclipse - 外部 JAR 和 git

java - 在初始化期间修改静态变量的单元测试

调试时的 C++ 计时

java - 使用 Eclipse MAT 无法找到由 Array Object 创建的内存泄漏

java - 如何根据ViewPager中当前的ImageView更新父Activity中的TextView

c# - 从字典中获取值的计数 C#

debugging - 如何在断点处将某些内容打印到控制台?

c# - 紧凑的框架 - 离线时 HttpWebRequest 资源泄漏

jQuery - Internet Explorer 内存泄漏