【问题标题】:finding cause of excessive memory usage in jvm 8在 jvm 8 中查找内存使用过多的原因
【发布时间】:2014-05-02 20:23:54
【问题描述】:

我的实际问题是,目前 netbeans 正在使用大约 4G(根据 OS X 上的活动监视器)的内存。我设置了几个内存限制选项无济于事。来自我的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 的内存是系统内存的一半(还要注意它在我的 Linux 机器上的行为不是这样,具有相同的版本)。我认为对于 java IDE 来说,800M-2G 之间的任何地方都可能是正常的,并且是可以忍受的,我不会调查,就是这样,使用剩余的可用内存,没有任何可感知的原因让我想要看看到底是什么,为什么要保留这个。

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

【问题讨论】:

  • 第一步 - 找出内存消耗不可接受的条件。这可以是特定的项目或操作,例如编译、查找用法等。如果您没有任何线索,则第二步 - 分析 netbeans,但很可能您不会获得任何有用的信息。也可能是您的应用程序在 netbeans 中使用一些容易发生内存泄漏的本机代码打开。
  • 具体定义“使用”。应用程序映射到 gigs 的共享库中并不少见,这些共享库 1) 实际上不是常驻的,2) 与许多其他正在运行的应用程序共享。
  • 另外,Activity Monitor 显示的每个内存类别(活动、非活动等)使用了多少?
  • @MichaelBrewer-Davis(不是 100% 确定你的意思是什么 A.M. 似乎没有这些名字......)真实 2.83G,共享 101.4M,私有 2.74G。目前,Heap 保留 415/630M,Metaspace 保留 150/160M,加载了 23k 个类(卸载了 500 个)。

标签: java debugging memory-leaks jvm java-8


【解决方案1】:

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

【讨论】:

  • 它告诉我堆分配了大约 600MB,元空间大约是 150,这比据报道操作系统使用的 2.85 少得多……目前大约有 2G 的内存下落不明。
  • 检查其他正在运行的进程。 JVisualVM 没有骗你。
  • 唯一的其他运行java进程是JVisualVM... OS X和visualvm与netbeans的进程ID一致。这真的是java可能消耗内存的仅有的两个地方吗?
  • 值得一说我不认为这是在撒谎,但我认为操作系统也不是因为我通常最终会交换。所以我认为出于某种原因必须在其他地方分配更多内存。
  • 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
猜你喜欢
  • 2020-12-09
  • 2012-09-15
  • 2013-12-21
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多