MAT内存分析工具 mat内存分析工具下载( 四 )


MAT内存分析工具 mat内存分析工具下载

文章插图
通过选择HashEntries命令,可以查看Hash表的内容 。图6.92所示为该功能的一个输出示例,其中显示了选中的Hash表的内容 。对于表中的Key和Value对象,通过右键快捷菜单,还可以进一步分析它们的引用情况和其他具体信息 。


MAT内存分析工具 mat内存分析工具下载

文章插图
十,扩展MATMAT是基于Eclipse开发平台的产品,因此它也具有很好的扩展性 。开发者可以使用Eclipse对MAT进行扩展,从而实现符合开发人员需要的功能更加强劲的内存分析工具 。通过扩展MAT,读者可以实现诸如自动对象查询、优化界面显示、报表增强等功能 。本节将通过一个简单的MAT插件,介绍扩展MAT的基本步骤和方法 。
注意:MAT是基于Eclipse的,因此对MAT进行二次开发与开发Eclipse插件非常类似 。
在Java中,java.lang.String对象实现是基于内部的value字符数组、偏移量offset和字符串长度count来定义字符串String的真实取值的 。如果内部数组value的实际长度很长,而字符串真实长度count的数值很小,则说明这个String的内存使用率不高,存在较为严重的内存浪费 。
使用公式count/value.length可以计算当前String对象的内存使用率 。在最优情况下,String对象的内存使用率是100%,即表示value数组中的所有字符都是当前字符串的内容 。当使用类似String.subString()的函数生成新的字符串时,String对象通过调整offset和count,而非创建新的value数组来生成新的字符串,此时String对象的内存利用率就会下降 。
本节中展示的插件将在显示String对象时,展示String对象的内存利用率,帮助开发者快速定位可以优化的字符串对象 。
为扩展MAT,首先需要安装MAT程序及Eclipse开发工具 。
(1)在Eclipse平台中添加MAT目标平台 。在Eclipse中打开对话框:Windows|Preferences|Plug-inDevelopment|TargetPlatform 。添加MAT平台,选择Add|Nothing|Next 。在目标平台的Locations页面中,添加Installation,并指定MAT的安装路径,如图6.93所示 。单击Finish按钮,并选择刚刚添加的MAT平台作为目标平台 。图6.94所示为配置完成后的目标平台 。


MAT内存分析工具 mat内存分析工具下载

文章插图
(2)创建一个插件工程 。选择File|New|Other|Plug-inproject命令,假设工程名称是MATExtension,其他参数可以使用默认设置 。创建完成后,在工程的Dependencies页面中添加org.eclipse.mat.api依赖,如图6.95所示 。


MAT内存分析工具 mat内存分析工具下载

文章插图


MAT内存分析工具 mat内存分析工具下载

文章插图
(3)添加插件的扩展点 。在本例中添加org.eclipse.mat.api.nameResolver,如图6.96所示 。在实际开发中,读者可以根据自己的需要,选择合适的扩展点增强MAT的功能 。接着填写扩展点的具体信息,如实现扩展点接口的类名和包名,Eclipse会自动生成指定的类,如图6.97所示 。


MAT内存分析工具 mat内存分析工具下载

文章插图


MAT内存分析工具 mat内存分析工具下载

文章插图
编辑生成的StringUsageDisplayer类,具体代码如下:


MAT内存分析工具 mat内存分析工具下载

文章插图


StringUsageDisplayer的功能是当MAT中显示String对象时,计算String对象的count值与value数组的长度比值 。注释@Subject指定当前IClassSpecificNameResolver只对java.lang.String对象有效 。
(4)当完成开发后,还需要对插件进行打包 。选择File|Export|Plug-inDevelopment|Deployableplug-insandfragments命令,在打开的对话框中选中要打包的插件,并设置MAT的安装路径进行插件安装,如图6.98所示 。
安装完成后,在MAT的plugins目录下就有了MATExtension插件的JAR包 。
安装插件后的MAT,可以使用以下OQL查询取得所有内存利用率不是100%的String 。


查询结果如图6.99所示,其中不仅显示了字符串的真实取值,也显示了当前字符串的内存使用率,可以帮助开发人员快速定位能够优化的字符串 。
注意:通过对MAT的扩展,可以让MAT更贴近实际生产环境,使之更易于使用,提高了堆内存分析的效率 。


MAT内存分析工具 mat内存分析工具下载

文章插图