我有一个扩展日食产品的应用程序。如果让它超时运行,则RAM使用量会增加到最大堆空间。
该应用程序不执行任何操作,只是停留在后台。我运行了JProfiler
,然后在Live Memory
部分中,通过按下Mark current
按钮标记了当前对象。查看Difference
列,创建了数百个对象(char,HashMap,LinkedHashSet等)。
JProfiler
中是否有一个功能可以让我查看是否从我的一个类中分配了对象(例如,从类型为com.example.mypackage.*
的类中分配了A型对象)?
这将有助于查看我是否引起了内存泄漏,或者是否必须向其他人填写错误报告。
我愿意接受提供这种功能的其他探查器建议。
答案 0 :(得分:1)
在JProfiler中,分配记录正是用于此目的。首先,请确保会话设置中的调用树过滤器仅包含您自己的程序包。
然后转到“实时内存->分配调用树”并记录分配。在呼叫树中,您可以看到累积的呼叫堆栈以及有关分配的信息。从主菜单中调用“查看->分析->显示类别”以显示为每个节点分配的特定类别。您还可以选择特定的类或程序包,并有选择地显示分配树。
有一个关联的“分配热点”视图,向您显示分配最多的呼叫堆栈。如果您只想查看自己的班级,请在右上角的“热点选项”选择器中选择“添加到呼叫班级”。