我的实际问题是,目前netbeans正在使用大约4G(根据OS X上的Activity Monitor)的内存。我设置了几个内存限制选项无济于事。来自我的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。那时活动监视器显示了2G内存使用情况。我想弄清楚的是整个1G额外的内存使用量。如果它是几百兆字节它是可以容忍的,但是2-4G的ram是系统内存的一半(同时注意到它在我的Linux机器上没有这种方式,具有相同的版本)。我认为800M-2G的任何地方对于Java IDE来说可能是正常的,并且是可以容忍的,我不会调查,就是这样,使用剩余的可用内存,没有任何可察觉的原因让我想要看看到底是什么,以及为什么要保留它。
更新:这是一个Memory leak in Swing on OS X in JVM 8 我无法接受那些无法让我找到解决问题的原因的答案。3}
答案 0 :(得分:2)
JDK随附工具。运行%JAVA_HOME%\ bin \ jvisualvm.exe并检查您的实例。您应该能够执行堆转储并分析使用情况。