一种对移动应用的内存对象进行分析的方法和装置制造方法及图纸

技术编号:15541661 阅读:82 留言:0更新日期:2017-06-05 10:58
本发明专利技术提供了一种对移动应用的内存对象进行分析的方法和装置,获取用户自对象容器中所确定的发生内存泄漏的对象,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应;根据所述发生内存泄漏的对象所对应的标记,查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。与现有技术相比,本发明专利技术帮助用户快速定位内存泄漏的源头,优化内存的使用,提升用户的使用体验。

Method and device for analyzing memory object of mobile application

The invention provides a mobile application memory object method and device for analysis, obtain the occurrence object, memory leak is determined from the user object container in which objects and mobile applications to store the objects in the container in the memory is not released when the corresponding real object; according to mark the place the object of memory leak of the reference path search to the objects of memory leak, the source determines the memory leak. Compared with the prior art, the invention helps the user quickly locate the source of the memory leak, optimize the memory usage and enhance the user's use experience.

【技术实现步骤摘要】
一种对移动应用的内存对象进行分析的方法和装置
本专利技术涉及计算机
,尤其涉及一种对移动应用的内存对象进行分析的技术。
技术介绍
移动端设备内存空间比较有限,要求开发人员在进行移动app(应用)开发时高效规范的使用内存。特别是在Android(安卓系统)开发中,许多低端机型的内存容量较小,不规范的内存使用非常容易产生OutOfMemory(内存不足,OOM)问题,极大地损害了用户体验。现有对内存对象的分析主要通过集成开发环境自带的内存分析工具来完成,这些工具主要通过主动Dump(抓取)内存快照,并对Dump得到的内存快照文件进行解析,获取不同类型内存对象的信息来获取当前app内存的使用情况。所述内存分析工具中只能对底层具体对象的内存使用进行分析,无法从更高层次掌握app业务逻辑对内存的使用。例如:图片在内存中使用byte数组进行表示,通过目前的分析工具能够获悉byte数组的大小,但是却无法观察该图片的样子,属于哪个业务。当前的内存分析工具分析内存的方式过于抽象,使得开发人员无法直观地对当前内存对象使用进行了解,降低了调试的效率。因此在出现内存泄漏,尤其是图片泄漏时,需要开发人员人工对内存中的对象进行查找,效率低下。因此,如何提供能够帮助用户快速定位内存泄漏的源头,并能使用户直观地获悉创建所述对象对应的操作的一种对移动应用的内存对象进行分析的技术,成为本领域技术人员亟需解决的技术问题之一。
技术实现思路
本专利技术的目的是提供一种对移动应用的内存对象进行分析的方法和装置。根据本专利技术的一个方面,提供一种对移动应用的内存对象进行分析的方法,其中,该方法包括以下步骤:a获取用户自对象容器中所确定的发生内存泄漏的对象,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应;b根据所述发生内存泄漏的对象所对应的标记,查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。优选地,所述步骤b包括:通过遍历所有对象,查找所确定的发生内存泄漏的对象;根据所述发生内存泄漏的对象所对应的标记,反向构建出持有关系的最短路径,从而查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。优选地,该方法还包括:x系统调用对象创建方法时,通过劫持方式接管所述对象创建方法,以创建所述对象;y创建所述对象时,对创建过程中生成的所述对象进行标记;z将标记后的所述对象及其对应的属性在所述对象容器中展现给所述用户。优选地,所述步骤y包括:创建所述对象时,使用带键值的弱引用对创建过程中生成的所述对象进行标记。优选地,该方法还包括:根据被回收的对象,对所述对象容器进行更新,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应。优选地,所述劫持方式包括:通过反射找到与所述对象对应的类和所述类中创建所述对象的方法和参数;修改所述方法的类型,反向调用JAVA层的方法。优选地,所述步骤z包括:按照预定规则,对所述标记后的所述对象及其对应的属性进行排序;在所述对象容器中,将经过排序的所述标记后的所述对象及其对应的属性展现给搜索用户;其中,所述预定规则包括以下至少任一项:按照所述对象的生成时间对所述对象及其对象的属性进行排序;按照所述对象的大小对所述对象及其对象的属性进行排序。根据本专利技术的另一个方面,还提供了一种用于对移动应用的内存对象进行分析的分析装置,其中,该分析装置包括:获取装置,用于获取用户自对象容器中所确定的发生内存泄漏的对象,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应;查找装置,用于根据所述发生内存泄漏的对象所对应的标记,查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。优选地,所述查找装置用于:通过遍历所有对象,查找所确定的发生内存泄漏的对象;根据所述发生内存泄漏的对象所对应的标记,反向构建出持有关系的最短路径,从而查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。优选地,该分析装置还包括:劫持装置,用于系统调用对象创建方法时,通过劫持方式接管所述对象创建方法,以创建所述对象;标记装置,用于创建所述对象时,对创建过程中生成的所述对象进行标记;展现装置,用于将标记后的所述对象及其对应的属性在所述对象容器中展现给所述用户。优选地,所述标记装置用于:创建所述对象时,使用带键值的弱引用对创建过程中生成的所述对象进行标记。优选地,该分析装置还包括:更新装置,用于根据被回收的对象,对所述对象容器进行更新,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应。优选地,所述劫持方式包括:通过反射找到与所述对象对应的类和所述类中创建所述对象的方法和参数;修改所述方法的类型,反向调用JAVA层的方法。优选地,所述展现装置包括:排序单元,用于按照预定规则,对所述标记后的所述对象及其对应的属性进行排序;展现单元,用于在所述对象容器中,将经过排序的所述标记后的所述对象及其对应的属性展现给搜索用户;其中,所述预定规则包括以下至少任一项:按照所述对象的生成时间对所述对象及其对象的属性进行排序;按照所述对象的大小对所述对象及其对象的属性进行排序。与现有技术相比,本专利技术具有以下优点:本专利技术根据用户自对象容器中确定的发生内存泄漏的对象和与发生内存泄漏的对象对应的标记,查找到内存泄漏的引用路径,帮助用户快速定位内存泄漏的源头,优化内存的使用,提升用户的使用体验。进一步地,本专利技术对所有对象进行标记,将标记后的所述对象及其对应的属性在所述对象容器中展现给所述用户,使得用户能够实时直观的观察内存使用情况,获悉其大小、创建时间等信息,从而更加直观的获悉创建所述对象对应的操作,提高了调试的效率。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本专利技术的其它特征、目的和优点将会变得更明显:图1示出根据本专利技术一个方面的一种对移动应用的内存对象进行分析的分析装置的结构示意图;图2示出根据本专利技术一个实施例的对标记后的图片以及图片属性展示的示意图;图3示出根据本专利技术另一个方面的一种对移动应用的内存对象进行分析的方法的流程示意图。附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本专利技术的示例性实施例的目的。但是本专利技术可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个本文档来自技高网...
一种对移动应用的内存对象进行分析的方法和装置

【技术保护点】
一种用于对移动应用的内存对象进行分析的方法,其中,该方法包括以下步骤:a获取用户自对象容器中所确定的发生内存泄漏的对象,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应;b根据所述发生内存泄漏的对象所对应的标记,查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。

【技术特征摘要】
1.一种用于对移动应用的内存对象进行分析的方法,其中,该方法包括以下步骤:a获取用户自对象容器中所确定的发生内存泄漏的对象,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应;b根据所述发生内存泄漏的对象所对应的标记,查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。2.根据权利要求1所述的方法,其中,所述步骤b包括:通过遍历所有对象,查找所确定的发生内存泄漏的对象;根据所述发生内存泄漏的对象所对应的标记,反向构建出持有关系的最短路径,从而查找到所述发生内存泄漏的对象的引用路径,确定所述内存泄漏的源头。3.根据权利要求1或2所述的方法,其中,该方法还包括:x系统调用对象创建方法时,通过劫持方式接管所述对象创建方法,以创建所述对象;y创建所述对象时,对创建过程中生成的所述对象进行标记;z将标记后的所述对象及其对应的属性在所述对象容器中展现给所述用户。4.根据权利要求3所述的方法,其中,所述步骤y包括:创建所述对象时,使用带键值的弱引用对创建过程中生成的所述对象进行标记。5.根据权利要求3或4所述的方法,其中,该方法还包括:根据被回收的对象,对所述对象容器进行更新,其中,所述对象容器中所存储的对象与移动应用在内存中的未释放对象实时对应。6.根据权利要求3至5中任一项所述的方法,其中,所述劫持方式包括:通过反射找到与所述对象对应的类和所述类中创建所述对象的方法和参数;修改所述方法的类型,反向调用JAVA层的方法。7.根据权利要求3至5中任一项所述的方法,其中,所述步骤z包括:按照预定规则,对所述标记后的所述对象及其对应的属性进行排序;在所述对象容器中,将经过排序的所述标记后的所述对象及其对应的属性展现给搜索用户;其中,所述预定规则包括以下至少任一项:按照所述对象的生成时间对所述对象及其对象的属性进行排序;按照所述对象的大小对所述对象及其对象的属性进行排序。8.一种用于对移动应用的内存对象进行分析的分析装置,其中,该分析装置包括:获取装置...

【专利技术属性】
技术研发人员:刘俊启
申请(专利权)人:百度在线网络技术北京有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1