android内存管理-MAT与防范手段

合集下载

内存分析工具MAT的使用

内存分析工具MAT的使用

内存分析工具MAT的使用一、MAT插件安装MAT(Memory Analyzer Tool) 是基于heap dumps来进行分析的,它的分析速度比jhat快,分析结果是图形界面显示,比java内置jhat的可读性更高,通过Eclipse市场安装方法/步骤1打开Eclipse - >help - > Eclipse Marketplace2点击install,等待下面的进度条加载完毕后,勾选全部,点击Next3同意协议后,点击Finish就开始安装MAT了直接输入URL安装方法/步骤21.打开Eclipse - >help - > Install New Software2.在work with输入图中下载地址,勾选Memory Analyzer forEclipse IDE选项3.若没有勾选Memory Analyzer for Eclipse IDE选项,点击地址栏旁边的Add,在location里输入以上地址,点击OK即可。

4.安装完成后提示重启Eclipse,重启后打开window - > openperspective,看到Memory Analysis证明安装成功。

二、MAT的使用案例一问题线上某一台机器出现异常.接口调用的rt达到了万级别..基本可以判断这个机器已经挂了.进而分析该机器一直在fgc.然后马上dump内存,进而进行分析(中间一些异常的gc日志没有截图).之前学习的jvm知识都是纯理论的,这次是实打实线上出现的问题.所以记录一下.步骤1 、先dump对应的堆,然后从线上发到自己本机dump的命令是jmap -dump:format=b, <pid>2、调整eclipse的内存具体的数值,需要看dump的文件大小.比如我的dump文件是1.3G,我就给了eclipse 2G的内存..据说有些dump文件有几十个G的大小,那么分析的机器也必须比这个大才行,否则eclipse本身就OOM了.3、分析.调整到 Memory Analysis 窗口,然后File->Open Heap Dump然后选择dump的文件,然后MAT就自动会进行分析..分析完了,直接查看Leak Suspects Report . MAT会自动帮你找内存泄露的疑凶.然后给你点下面的Detail .可以看到最直观的类和所占用的大小可以看到, IosPushClient 的直接引用是40byte 但是对应的间接引用达到了恐怖的420M 那么再点击该类,list obejcts .重点看间接引用占用的大的可以看到这个LinkedHashMap中,有47528个1776byte的对象。

Android避免内存溢出(OutofMemory)方法总结

Android避免内存溢出(OutofMemory)方法总结

of Memory)方法总Android避免内存溢出(Out结避免内存溢出的方法,主要是对以下三个方面对程序进行优化武汉Android培训内存引用在处理内存引用之前,我们先来复习下什么是强引用、软引用、弱引用、虚引用强引用:强引用是使用最普遍的引用。

如果一个对象具有强引用,那垃圾回收器绝不会回收它。

当内存空间不足,Java 虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

软引用:如果一个对象只具有软引用,但内存空间足够时,垃圾回收器就不会回收它;直到虚拟机报告内存不够时才会回收,只要垃圾回收器没有回收它,该对象就可以被程序使用。

软引用可用来实现内存敏感的高速缓存。

软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。

弱引用:只具有弱引用的对象拥有更短暂的生命周期。

在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间是否足够,都会回收它的内存。

不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

虚引用:虚引用可以理解为虚设的引用,与其他几种引用都不同,虚引用并不会决定对象的生命周期。

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

虚引用主要用来跟踪对象被垃圾回收器回收的活动。

虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

Android移动程序安全性漏洞分析和加固手段

Android移动程序安全性漏洞分析和加固手段

Android移动程序安全性漏洞分析和加固手段移动应用程序的快速发展和普及给人们的生活带来了极大的便利,然而,与此同时,移动应用程序也面临着各种安全性漏洞的威胁。

恶意软件、数据泄露和非法入侵都是常见的安全风险,可能导致用户的个人信息被盗取、设备被控制,甚至金融损失。

为了保护用户的隐私和安全,开发人员需要分析并加固移动应用程序中的安全性漏洞。

1. 安全性漏洞分析移动应用程序中常见的安全性漏洞包括:未经授权的数据访问、不安全的数据存储、不正确使用的加密算法、不合理的权限管理和恶意软件注入等。

以下是一些常见的安全性漏洞及其分析。

1.1 未经授权的数据访问在Android应用程序中,敏感数据通常存储在Shared Preferences、SQLite数据库或文件中。

如果不恰当地实施访问控制,攻击者可以通过读取或修改这些数据来获取敏感信息。

开发人员应该使用正确的权限和加密来确保数据的安全。

1.2 不安全的数据存储将敏感数据存储在设备上时,如果没有正确地保护这些数据,攻击者可以通过对应用程序数据进行物理或逻辑攻击来获取敏感信息。

开发人员应该使用设备的加密功能,例如Android提供的KeyStore来加密存储的数据。

1.3 不正确使用的加密算法加密算法是保护数据机密性的重要手段,但如果加密算法的实现不正确,就会导致加密数据易受攻击。

开发人员应该避免使用被破解的或已知有安全漏洞的加密算法,同时确保正确实施加密算法并使用适当的密钥管理策略。

1.4 不合理的权限管理在Android应用程序中,权限是授予应用程序执行特定操作或访问敏感数据的方式。

不正确管理权限可能导致应用程序执行未经授权的操作,或者过度申请权限,导致用户对应用程序的信任降低。

开发人员应该最小化权限请求,并在用户明确同意的情况下使用这些权限。

1.5 恶意软件注入恶意软件注入是指攻击者通过在应用程序的代码中插入恶意代码或链接,来获取用户敏感信息或控制设备。

android mat用法

android mat用法

Android MAT(Memory Analyzer Tool)是一款用于分析Android应用程序内存使用情况的工具。

以下是使用Android MAT的一般步骤:
1. 下载MAT:可以从Android官方网站或其他可靠来源下载MAT。

2. 安装MAT:将MAT安装到您的计算机上,并确保您具有足够的权限来运行它。

3. 创建heap dump:在Android设备或模拟器上运行应用程序,并使用Android Profiler工具(在Android Studio中)创建一个heap dump。

您可以在MAT中使用此heap dump文件。

4. 打开MAT并打开heap dump:启动MAT,并选择“File”菜单中的“Open Heap Dump”选项。

然后,选择您刚刚创建的heap dump 文件。

5. 分析内存使用情况:在MAT中,您可以看到应用程序的内存使用情况,包括对象的内存使用情况、内存泄漏等。

您可以使用MAT提供的各种工具和功能来分析内存使用情况,例如标记对象、查看内存泄漏等。

6. 解决问题:根据MAT的分析结果,您可以找到应用程序中的内存泄漏和其他问题,并采取适当的措施来解决它们。

请注意,以上步骤是一般性的指导,具体步骤可能会因您使用的MAT版本和具体情况而有所不同。

因此,在使用MAT时,请参考官方文档或相关教程以获得更详细和准确的指导。

MAT的使用(一)使用方法介绍

MAT的使用(一)使用方法介绍

MAT的使用(一)使用方法介绍MAT(即Memory Analysis Toolkit)是一款内存分析工具,提供了多种功能和工具,可以帮助安全研究人员、取证人员和系统管理员对内存进行深入分析和调试。

接下来将介绍MAT的使用方法。

MAT的安装内存镜像获取在进行内存分析之前,需要先获取目标系统的内存镜像。

通常有以下几种获取内存镜像的方法:1. 内存转储工具:可以使用第三方工具(如winpmem、LiME等)在目标系统上生成内存快照,并将其保存到文件中。

这些工具通常需要在目标系统上运行,并且需要管理员权限。

2. 虚拟机快照:如果目标系统是在虚拟机中运行的,可以通过虚拟机管理软件(如VMware、VirtualBox等)创建系统快照,然后将快照文件作为内存镜像进行分析。

3. 物理设备拷贝:可以通过硬件取证设备(如Write Blocker、Logicube等)将目标系统的物理内存复制到外部存储介质(如硬盘、USB 设备等)中,然后将其用作内存镜像。

加载内存镜像将获取到的内存镜像加载到MAT中进行分析。

在MAT的主界面上,点击"File"->"Load Profile",选择要加载的内存镜像文件。

MAT支持多种内存镜像格式,如Raw、LiME等,用户可以根据实际情况选择合适的格式进行加载。

内存分析一旦内存镜像加载完成,用户就可以利用MAT提供的各种功能进行内存分析了。

下面介绍几个常用的功能:1. 进程查看:点击"Processes"选项卡,用户可以查看系统中运行的所有进程和线程的详细信息,包括进程ID、进程名、执行路径、父进程等。

2. 内存映射:点击"Mapping"选项卡,用户可以查看系统中的内存映射信息,包括代码段、数据段、堆段和栈段等。

用户可以通过查看内存映射信息来了解进程的内存使用情况。

3. 文件系统查看:点击"Filesystems"选项卡,用户可以查看系统中的文件系统信息,包括挂载点、文件数量、文件夹结构等。

使用AndroidStudio提供的AndroidProfiler工具和mat进行内存泄漏分析

使用AndroidStudio提供的AndroidProfiler工具和mat进行内存泄漏分析

使用AndroidStudio提供的AndroidProfiler工具和mat进行内存泄漏分析AndroidProfiler是Android Studio 提供的一个强大的性能分析工具,它可以帮助我们识别和解决应用中的内存泄漏问题。

同时,我们还可以使用MAT(Memory Analyzer Tool)来进一步分析内存泄漏的原因。

首先,我们需要运行我们的应用程序,并连接我们的设备或模拟器。

然后,我们可以打开Android Studio并选择“Android Profiler”选项卡。

在这个选项卡中,我们可以看到CPU、内存、网络和电池等资源的使用情况。

在内存部分,我们可以看到应用程序的内存使用情况和堆栈跟踪。

我们可以使用堆栈跟踪来分析哪些对象正在使用内存,以及它们是如何被创建和释放的。

当我们发现内存使用量异常高时,我们可以使用MAT工具来进一步分析内存泄漏的原因。

首先,我们需要导出堆转储文件(heap dump)。

在Android Studio中,我们可以通过运行应用程序并在内存部分的右上角点击“Dump Java Heap”按钮来导出堆转储文件。

导出文件后,我们可以使用MAT工具进行分析。

打开MAT工具后,我们可以选择导入我们刚刚导出的堆转储文件。

然后,MAT会分析堆转储文件,并提供一些有用的功能来分析内存泄漏。

在MAT工具中,我们可以使用“Histogram”功能来查看内存中的对象数量和大小。

这将帮助我们找到可能造成内存泄漏的对象。

另一个有用的功能是“Leak Suspects”。

MAT会自动分析堆转储文件,并提供一些潜在的内存泄漏嫌疑对象。

我们可以点击这些对象来查看详细信息,包括对象的引用链。

通过分析引用链,我们可以找到内存泄漏的根本原因。

通常,内存泄漏是由于对象仍然保留了对其他对象的引用,导致这些对象无法被垃圾回收。

一旦我们找到了内存泄漏的原因,我们可以采取相应的措施来解决问题。

这可能包括释放不必要的引用、使用弱引用或软引用来避免长时间持有对象等。

Android开发中的内存管理及优化方法

Android开发中的内存管理及优化方法

Android开发中的内存管理及优化方法Android操作系统随着技术的不断发展和升级,在内存管理和优化方面也不断变化和提高。

内存管理是非常重要的,它直接关系到应用程序的性能和稳定性。

本文将介绍Android开发中的内存管理及优化方法,从而让开发者在开发过程中更好地利用内存资源,提高应用程序的性能和稳定性。

一、内存管理1. 内存类型在Android开发中,确保正确的内存类型分配非常重要。

Android平台上有两种类型的内存:Java堆和本地堆。

Java堆是Java代码所使用的标准内存,包括对象和数组实例,同时还包括Java虚拟机组件和类实例。

本地堆是非Java代码使用的内存,例如本地C代码和存储映射的文件等。

2. 内存限制Android设备的内存容量非常有限,因此在开发时必须保留很小的内存限制。

每个应用程序都有一个分配给它的最大内存大小,这是由Android操作系统动态分配控制的。

在Android平台上,每个应用程序都有256MB的堆大小限制,这个限制会根据不同设备的配置自动调整。

3. 内存泄漏内存泄漏是指由于未正确释放资源而导致内存不断增加,从而导致应用程序崩溃或者出现其他问题的情况。

在Android开发中,内存泄漏不可避免。

为避免内存泄漏,应该使用清理资源的方法,这样可以防止不必要的内存使用。

二、内存优化1. 优化代码优化代码是最好的内存管理方法之一。

为了更好地管理内存,应该尽可能减少使用不必要的变量和对象。

定义变量时必须确保变量在使用时只会占用必要的内存空间。

在开发Android应用程序时,最好遵循“无用代码不做”原则,以减少内存占用。

2. 内存缓存内存缓存是一种内存管理的常见和有效方法。

库(例如Glide)提供了内存缓存,可以轻松存储大量的图像,而不必反复从硬盘或Web服务器加载。

在内存缓存中,缓存文件可以很快地读取,并在需要时提供给应用程序进行使用,这是一种优化的内存管理方式。

3. 优化图像图像处理是应用程序中内存管理的一大挑战。

android mat用法 -回复

android mat用法 -回复

android mat用法-回复Android MAT(Memory Analysis Tool)是一种用于Android应用程序的内存分析工具。

它可以帮助开发人员在应用程序开发的各个阶段,特别是在内存泄漏和性能问题方面进行调试和修复。

作为一个开发人员,使用MAT工具可以帮助我们更好地理解我们的应用程序在内存方面的问题,并提供相应的解决方案。

下面将详细介绍如何使用Android MAT工具来分析和调试应用程序的内存问题。

第一步:安装Android MAT工具首先,您需要从Eclipse MarketPlace或者Android开发者官网下载并安装MAT工具。

安装完成后,您可以在Eclipse的菜单栏中找到MAT工具。

第二步:运行应用程序并生成HPROF文件当您的应用程序运行时,通过点击Eclipse的“Dump HPROF file”按钮或者使用adb命令来生成应用程序的HPROF文件。

例如:adb shell am dumpheap -n com.example.app /sdcard/heapdump.hprof。

第三步:打开HPROF文件打开MAT工具后,您需要点击菜单栏中的“Open Heap Dump”按钮来加载应用程序的HPROF文件。

选择相应的文件之后,MAT将会进行分析。

第四步:分析内存泄漏在MAT工具的“Overview”选项卡中,您可以首先查看整个应用程序的总体情况。

通过分析柱状图和饼状图,您可以了解应用程序的内存使用情况。

接下来,在“Dominator Tree”选项卡中,您可以找到内存中最大的对象。

这些对象可能是内存泄漏的源头。

选择其中一个对象,然后在右侧的“Paths from GC Roots”窗口中查看它的引用链。

通过分析引用链,您可以确定对象是否被正确地释放。

在MAT工具的“Leak Suspects”选项卡中,您可以找到潜在的内存泄漏问题。

MAT将根据引用关系和对象使用情况来为您识别潜在的内存泄漏源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内存管理与防范手段目录内存管理与防范手段 (1)一.内存分配跟踪工具DDMS–>Allocation tracker 使用 (2)二.内存监测工具DDMS-->Heap (2)三.内存分析工具MAT(MemoryAnalyzerTool) (3)1.生成.hprof文件 (4)2.使用MAT导入.hprof文件 (5)3.使用MAT的视图工具分析内存 (5)四.MAT使用实例 (5)1.生成heap dump (7)2.用MAT分析heap dumps (9)3.使用MAT比较heap dumps (11)五.防范不良代码 (11)1.查询数据库没有关闭游标 (11)2.缓存convertView (12)3.Bitmap对象释放内存 (13)4.释放对象的引用 (13)5.Context的使用 (14)6.线程 (17)7.其他 (20)六.优化代码 (20)1.使用自身方法(Use Native Methods) (20)2.使用虚拟优于使用接口 (20)3.使用静态优于使用虚拟 (20)4.尽可能避免使用内在的Get、Set方法 (20)5.缓冲属性调用Cache Field Lookups (21)6.声明Final常量 (21)7.慎重使用增强型For循环语句 (22)8.避免列举类型Avoid Enums (23)9.通过内联类使用包空间 (23)10.避免浮点类型的使用 (24)11.一些标准操作的时间比较 (24)12.为响应灵敏性设计 (25)一.内存分配跟踪工具DDMS–>Allocation tracker 使用运行DDMS,只需简单的选择应用进程并单击Allocation tracker标签,就会打开一个新的窗口,单击“Start Tracing”按钮;然后,让应用运行你想分析的代码。

运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出现第一个表格中。

单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。

通过allocation tracker,不仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。

尽管在性能关键的代码路径上移除所有的内存分配操作不是必须的,甚至有时候是不可能的,但allocation tracker可以帮你识别代码中的一些重要问题。

举例来说,许多应用中发现的一个普遍错误:每次进行绘制都创建一个新的Paint对象。

将Paint的创建移到一个实例区域里,是一个能极大提高程序性能的简单举措。

二.内存监测工具DDMS-->Heap无论怎么小心,想完全避免badcode是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。

Androidtools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使eclipse的ADT插件,并以真机为例,在模拟器中的情况类似)。

用Heap 监测应用进程使用内存情况的步骤如下:1.启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;2.将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“MassStorage”;3.链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;4.点击选中想要监测的进程,比如system_process进程;5.点击选中Devices视图界面中最上方一排图标中的“UpdateHeap”图标;6.点击Heap视图中的“CauseGC”按钮;7.此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况a)点击“CauseGC”按钮相当于向虚拟机请求了一次gc操作;b)当内存使用信息第一次显示以后,无须再不断的点击“CauseGC”,Heap视图界面会定时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化;c)内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。

如何才能知道我们的程序是否有内存泄漏的可能性呢。

这里需要注意一个值:Heap视图中部有一个Type叫做dataobject,即数据对象,也就是我们的程序中大量存在的类类型的对象。

在dataobject一行中有一列是“TotalSize”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。

可以这样判断:a)不断的操作当前应用,同时注意观察dataobject的TotalSize值;b)正常情况下TotalSize值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;c)反之如果代码中存在没有释放对象引用的情况,则dataobject的TotalSize值在每次GC后不会有明显的回落,随着操作次数的增多TotalSize的值会越来越大,直到到达一个上限后导致进程被kill掉。

d)此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的dataobject的TotalSize正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill。

三.内存分析工具MAT(MemoryAnalyzerTool)如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定会把人逼疯,特别是在维护别人写的代码的时候。

这里介绍一个极好的内存分析工具MemoryAnalyzerTool(MAT)。

MAT是一个Eclipse插件,同时也有单独的RCP客户端。

官方下载地址、MAT介绍和详细的使用教程请参见:/mat,在此不进行说明了。

另外在MAT安装后的帮助文档里也有完备的使用教程。

在此仅举例说明其使用方法。

我自己使用的是MAT的eclipse插件,使用插件要比RCP稍微方便一些。

使用MAT进行内存分析需要几个步骤,包括:生成.hprof文件、打开MAT并导入.hprof 文件、使用MAT的视图工具分析内存。

以下详细介绍。

1.生成.hprof文件a)打开eclipse并切换到DDMS透视图,同时确认Devices、Heap和logcat视图已经打开了;b)将手机设备链接到电脑,并确保使用“USB调试”模式链接,而不是“Mass Storage“模式;c)链接成功后在Devices视图中就会看到设备的序列号,和设备中正在运行的部分进程;d)点击选中想要分析的应用的进程,在Devices视图上方的一行图标按钮中,同时选中“Update Heap”和“Dump HPROF file”两个按钮;e)这是DDMS工具将会自动生成当前选中进程的.hprof文件,并将其进行转换后存放在sdcard当中,如果你已经安装了MAT插件,那么此时MAT将会自动被启用,并开始对.hprof 文件进行分析;注意:第4步和第5步能够正常使用前提是我们需要有sdcard,并且当前进程有向sdcard中写入的权限(WRITE_EXTERNAL_STORAGE),否则.hprof文件不会被生成,在logcat中会显示诸如ERROR/dalvikvm(8574):hprof:can'topen/sdcard/com.xxx.hprof-hptemp:Permissiondenied.的信息。

如果我们没有sdcard,或者当前进程没有向sdcard写入的权限(如system_process),那我们可以这样做:在当前程序中,例如framework中某些代码中,可以使用android.os.Debug中的public static void dumpHprofData(String fileName) throws IOException方法,手动的指定.hprof 文件的生成位置。

例如:xxxButton.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewview){android.os.Debug.dumpHprofData("/data/temp/myapp.hprof");......}}上述代码意图是希望在xxxButton被点击的时候开始抓取内存使用信息,并保存在我们指定的位置:/data/temp/myapp.hprof,这样就没有权限的限制了,而且也无须用sdcard。

但要保证/data/temp目录是存在的。

这个路径可以自己定义,当然也可以写成sdcard当中的某个路径。

2.使用MAT导入.hprof文件a)如果是eclipse自动生成的.hprof文件,可以使用MAT插件直接打开(可能是比较新的ADT才支持);b)如果eclipse自动生成的.hprof文件不能被MAT直接打开,或者是使用android.os.Debug.dumpHprofData()方法手动生成的.hprof文件,则需要将.hprof文件进行转换,转换的方法:将.hprof文件拷贝到PC上的/ANDROID_SDK/tools目录下,并输入命令hprof-conv xxx.hprof yyy.hprof,其中xxx.hprof为原始文件,yyy.hprof为转换过后的文件。

转换过后的文件自动放在/ANDROID_SDK/tools目录下。

OK,到此为止,.hprof文件处理完毕,可以用来分析内存泄露情况了。

c)在Eclipse中点击Windows->OpenPerspective->Other->MemoryAnalyzer,或者打MemoryAnalyzerTool的RCP。

在MAT中点击File->OpenFile,浏览并导入刚刚转换而得到的.hprof文件。

3.使用MAT的视图工具分析内存导入.hprof文件以后,MAT会自动解析并生成报告,点击DominatorTree,并按Package分组,选择自己所定义的Package类点右键,在弹出菜单中选择Listobjects->Withincomingreferences。

这时会列出所有可疑类,右键点击某一项,并选择PathtoGCRoots->excludeweak/softreferences,会进一步筛选出跟程序相关的所有有内存泄露的类。

相关文档
最新文档