我的应用程序需要大约10GB的RAM用于特定输入,而对于常规输入,大约1GB就足够了。通过对JProfiler进行更仔细的分析,可以发现(在GC之后)java的标准类使用了相当多的内存。util* :
LinkedHashMap$Entry
、
HashMap$Entry[]
、
LinkedHashMap
、
HashMap$KeySet
、
HashMap$EntrySet
、
LinkedHashSet
、
TreeMap$Entry
、TreeMap
(按此顺序)和相关类。下面的条目是我自己代码中的一个类,其中实例的数量和使用的内存量似乎非常合理。
详细说明,总堆使用量约为900 MByte,我在
All Object
视图中看到以下Size
条目:
LinkedHashMap$Entry:418 MB
HashMap$Entry[]
:178 MB
LinkedHashMap:124兆字节
HashMap$KeySet:15 MB
LinkedHashMap使用的内存似乎过高,即使考虑到每个LinkedHashSet都有一个LinkedHashMap作为后盾。
我在JProfiler中记录了对象分配,并观察了LinkedHashMap的分配热点。在那里,我看到我不理解的条目:
第三个条目显示了一个名为X的热点(占分配内存的6.5%)。
一般来说,如何找到保留对(许多)LinkedHashMap对象引用的代码?使用堆遍历器,我只能看到很多这样的实例,但看不到任何模式(即使在观察GC根的路径时)。在我的实验中,所有的例子似乎都是有序的。
可能重要的事情:
我的应用程序构造了一个结果(用于进一步处理),对于这种构造,观察到内存使用率很高。构造会不断创建对象,因此不可能等待一个稳定点,然后观察每个创建的LinkedHashMap对象
一般来说,如何找到保留对(大量)LinkedHashMap对象的引用的代码?
在堆遍历器中,选择“LinkedHashMap”并创建一个新的对象集。然后切换到“引用”视图并显示“累积传入引用”。在那里,您可以分析整个对象集的引用。
至于你关于分配热点和为什么显示Thread.run方法的问题:这些是反向跟踪,它们显示热点是如何被调用的,节点上的所有数字都是对顶部热点的贡献。最深的节点将永远是切入点,通常是Thread.run方法或主方法。
代码的jsfiddle如下:http://jsfiddle.net/4qhr2/ 然而,我不清楚如何使用谷歌Chrome的分析器来验证这是,事实上的情况。堆探查器快照中出现了无数的东西,我不知道如何解码什么是好的/坏的。到目前为止,我在它上面看到的教程要么告诉我“使用快照分析器”,要么给我一个关于整个分析器如何工作的非常详细的宣言。是否可以仅仅将探查器作为一个工具,或者我真的必须了解整个事情是如何
问题内容: 我怀疑我们的ActiveMQ连接桥中存在严重的内存泄漏- 我们看到的是典型的内存泄漏模式(应用程序加载正常,如果长时间运行或在短时间内一次又一次地重新启动,则会降低速度) 。我查找了发现Java内存泄漏的现代最佳实践,许多开发人员似乎正在放弃传统工具(如jhat / jmap)来代替new(er)。 启动此工具(并花几个小时阅读其教程)后,我便能够为CPU和内存拍摄探查器快照。 在这一
我需要找到Flutter的内存泄漏。如何找到他们?以及如何为测试创建内存泄漏?
我们在堆大小为512M的IBM J9 VM上运行weblogic服务器。 今天,服务器因OutOfMemory错误而失败。 我使用Eclipse Memory Analyzer打开了堆转储文件xxx.phd(安装了IBM DTFJ pluign以支持。phd文件)。 垫子给我一份泄漏嫌疑人报告,像这样: 我如何找到创建这个大数组的类? 或者任何帮助我识别大数组的提示?
问题内容: 我有一个在django中运行的小型多线程脚本,随着时间的流逝,它开始使用越来越多的内存。将其保留一整天会消耗大约6GB的RAM,我开始进行交换。 在http://www.lshift.net/blog/2008/11/14/tracing-python-memory- leaks 之后,我将其视为最常见的类型(仅使用800M内存): 这没有什么奇怪的。我现在应该怎么做才能帮助调试内存问
我有一个后台服务正在运行,它正在将数据同步到我的服务器。 泄漏发生在以下代码中: 内存分析器显示: stockserv.datasyncer.jobexecutor@0x135f6550上的线程保留了总大小为18.603.056(37,90%)字节的局部变量。内存累积在“”加载的“java.lang.Object[]”的一个实例中。 JobExecutor->Arraylist->Object[2