Java 对于1GB堆,在visual VM中运行计算保留大小需要多长时间?

Java 对于1GB堆,在visual VM中运行计算保留大小需要多长时间?,java,memory,heap,visualvm,Java,Memory,Heap,Visualvm,我有一个1 GB的堆转储,来自一个耗尽堆空间的java进程。我已将堆上载到java6发行版附带的jvisualm中。大约16小时前,我开始了“计算保留大小”的过程,它仍然在运行。在1GB堆上运行前20个对象的计算保留大小需要多长时间?我应该期待它结束吗 我有一个600MB的堆,计算保留大小只需要900 CPU分钟。15个小时。我会假设它与堆上的内容非常相关,所以我不会推断到您的堆(您也指出它没有完成;),但它是另一个数据点。在我的机器上似乎也要花很长时间,但我从taskmanager中注意到,似

我有一个1 GB的堆转储,来自一个耗尽堆空间的java进程。我已将堆上载到java6发行版附带的jvisualm中。大约16小时前,我开始了“计算保留大小”的过程,它仍然在运行。在1GB堆上运行前20个对象的计算保留大小需要多长时间?我应该期待它结束吗

我有一个600MB的堆,计算保留大小只需要900 CPU分钟。15个小时。我会假设它与堆上的内容非常相关,所以我不会推断到您的堆(您也指出它没有完成;),但它是另一个数据点。

在我的机器上似乎也要花很长时间,但我从taskmanager中注意到,似乎再也没有发生任何事情(CPU使用率低,磁盘I/O)。原因是,尽管进度指示器一直显示动画,但根据日志文件,该操作被静默中止

要打开日志,我使用以下步骤:

  • 单击“帮助”
  • 点击
  • 单击日志文件
这让我在日志的底部看到:

SEVERE [org.openide.util.RequestProcessor]
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.HashMap.newNode(HashMap.java:1734)
    at java.util.HashMap.putVal(HashMap.java:630)
    at java.util.HashMap.put(HashMap.java:611)
    at java.util.HashSet.add(HashSet.java:219)
    at org.netbeans.lib.profiler.heap.DominatorTree.intersect(DominatorTree.java:279)
    at org.netbeans.lib.profiler.heap.DominatorTree.computeOneLevel(DominatorTree.java:114)
    at org.netbeans.lib.profiler.heap.DominatorTree.computeDominators(DominatorTree.java:64)
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSize(HprofHeap.java:537)
    at org.netbeans.lib.profiler.heap.HprofHeap.computeRetainedSizeByClass(HprofHeap.java:594)
    at org.netbeans.lib.profiler.heap.ClassDump.getRetainedSizeByClass(ClassDump.java:102)
    at org.netbeans.modules.profiler.heapwalk.HeapFragmentWalker.computeRetainedSizes(HeapFragmentWalker.java:100)
    at org.netbeans.modules.profiler.heapwalk.ClassPresenterPanel$1$1.run(ClassPresenterPanel.java:187)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1393)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2003)
默认情况下,我的64位Java VM Heapsize将限制在计算机内存的25%(甚至更低的VisualVM内置限制)。为了在下一次尝试中解决此问题,我将再次尝试以如下方式启动VisualVM:

jvisualvm.exe -J-Xmx16g
在此之后,日志在启动时显示:

Heap memory usage: initial 24,0MB maximum 14563,6MB

我不知道你在说什么(我对Java几乎没有经验),但我的逻辑告诉我,如果你不是在1GHz的1GB内存(或更少)系统上运行这个,16小时太多了……只是出于好奇,它完成了吗?花了多长时间?如果它没有完成,第二次运行是否成功完成?它从未完成。我最终下载了一个YourKit试用版,它在大约20分钟内完成了相同的过程。记录在案:在MacBook Pro 16GB内存上,14GB堆转储(.bin)大约需要12小时。VisualVM被赋予了10G和-J-Xmx10g。我发现jvisualvm忽略了命令行中的mx命令行标志,因为它已经从%JDK_HOME%\lib\VisualVM\etc\VisualVM.conf中引入了默认值-Xmx256m。看见