Eclipsemat是一个很好的JVM内存分析工具。以下是一些有效使用它的小窍门。
图:月食垫。
1.使用独立版本
Eclipse MAT有两个版本:
- 单独行动。
- 日食插件。
根据我的个人经验,独立版本似乎比插件版本工作得更好、更快。因此,我强烈建议安装一个独立版本。
2.日食垫-堆大小
如果您正在分析一个大小为2GB的堆转储,那么至少为Eclipsemat分配至少1GB的额外空间。如果您可以分配更多的堆空间,那么越多越好。您可以为Eclipsemat工具分配额外的堆空间,方法是编辑MemoryAnalyzer.ini档案。此文件位于MemoryAnalyzer.exe所在的文件夹中。到MemoryAnalyzer.n我要你加上-Xmx3g
在底部。
例子:
-startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140603-1326 -vmargs -Xmx3g
3.启用“保持无法触及的对象”
从报告中,Eclipsemat删除了它认为“无法实现”的对象。由于“不可达”,对象有资格进行垃圾收集,MAT不会在报表中显示它们。Eclipsemat将方法中的局部变量分类为“不可访问的对象”。一旦线程退出该方法,局部变量中的对象将有资格进行垃圾收集。
但是,有几种情况下,线程将进入“BLOCKED“或延长”WAITING,’ ‘TIMED_WAITING“国家。在这种情况下,局部变量将仍然存在于内存中,占据空间。由于Eclipsemat默认设置没有显示不可访问的对象,因此您将无法获得这些对象的可见性。您可以通过以下方式更改Eclipsemat 1.4.0版本中的默认设置:
1.转到Window>Preferences…
2.点击“内存分析器”。
3.选择“保持无法到达的对象”。
4.点击“确定”按钮。
图:Eclipsemat 1.4.0,显示了如何启用“保持不可访问的对象”。
4.智能数据设置
默认情况下,Eclipsemat以字节显示数据。很难以字节读取大对象大小并对其进行消化。示例Eclipse MAT打印的对象大小如下:‘193,006,366’如果这些数据可以以KB、MB、GB,即“184.07 MB”显示,则要简单得多。
图:Eclipsemat默认选项显示对象大小(以字节为单位)。
Eclipsemat提供了一个选项,可以根据对象的适当大小以KB、MB、GB显示对象大小。可以通过以下步骤启用它:
- 转到Window>Preferences…
- 单击“内存分析器”。
- 在“Bytes Display”部分中,选择‘Smart:如果值为千兆字节或…’
- 点击“确定”按钮。
图:启用“智能”数据显示的设置。
一旦进行了此设置更改,所有数据将以更可读的KB、MB、GB格式显示,如下图所示。