我的实际问题是,目前 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 来说可能都是正常的,并且是可以忍受的,我不会调查,就是这样,使用剩余的可用内存,没有任何明显的原因让我想要看看到底是什么,以及为什么要保留这个。
更新:这是 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/