Java 查找jvm 8中内存使用过度的原因

Java 查找jvm 8中内存使用过度的原因,java,debugging,memory-leaks,jvm,java-8,Java,Debugging,Memory Leaks,Jvm,Java 8,我的实际问题是,目前netbeans使用的内存大约为4G(根据OSX上的活动监视器)。我设置了几个内存限制选项,但都没有用。从我的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=tru

我的实际问题是,目前netbeans使用的内存大约为4G(根据OSX上的活动监视器)。我设置了几个内存限制选项,但都没有用。从我的
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 
它的元空间图显示,它为堆保留了大约600米,为元空间保留了150米。当时活动监视器显示2G内存的使用情况。我想弄清楚的是1G额外的内存使用在哪里。如果是几百兆字节,这是可以接受的,但2-4G的ram是系统内存的一半(还要注意的是,在相同版本的Linux机器上,它的表现不是这样的)。我认为800M-2G对于java IDE来说可能是正常的,并且是可以容忍的,我不会调查,就是这样,使用剩余的可用内存,没有任何可感知的原因,让我想知道到底是什么,以及它为什么保留这个


更新:这是一个我无法接受的答案,我不可能找到jdk 8中问题的原因。

jdk附带工具。运行%JAVA\u HOME%\bin\jvisualvm.exe并检查您的实例。您应该能够执行heapdump并分析使用情况。

第一步-查找内存消耗不可接受的条件。这可能是特定的项目或操作,如编译、查找用法等。第二步,如果您没有任何线索——评测netbeans,但很可能您不会得到任何有用的信息。也可能是您的应用程序在netbeans中打开时使用了一些容易发生内存泄漏的本机代码。对于一个应用程序来说,将MMA映射到GIG值的共享库(1)不是实际驻留的,2)与许多其他正在运行的应用程序共享的情况一点也不少见。另外,活动监视器显示在每类内存(活动、非活动等)中使用了多少内存?@MichaelBrewer Davis(不是100%确定你的意思,A.M.似乎没有这些名称…)Real 2.83G,Shared 101.4M,Private 2.74G。目前,堆保留415/630M,Metaspace保留150/160M,加载23k类(卸载500个).它告诉我堆的分配容量约为600MB,元空间约为150,这大大低于据报道操作系统使用的2.85…目前大约有2G内存未被占用。检查其他正在运行的进程。JVisualVM没有骗你。唯一正在运行的java进程是JVisualVM…以及OS X和visualvm同意netbeans的进程id。这真的是java可以消耗内存的唯一两个地方吗?值得一提的是,我不认为这是在撒谎,但我也不认为操作系统是这样,因为我通常都会交换。因此,出于某种原因,我认为必须在其他地方分配更多内存。
文件大小:364.7 MB总字节数:332921,516个总类:24143个总实例:4151139个类加载器:3272个GC根:65185个待完成的对象数:0