内存检测方法、装置、计算机可读存储介质及计算机制造方法及图纸

技术编号:18165363 阅读:30 留言:0更新日期:2018-06-09 11:21
本公开涉及一种内存检测方法、装置、计算机可读存储介质及计算机,用以解决现有技术中由于实例对象之间错综的引用关系而导致内存分析效率低的技术问题。该方法包括:建立实例对象的引用关系有向图;根据引用关系有向图利用支配树算法计算得到支配树,其中,在支配树中,根节点到每一子节点之间有唯一路径;根据支配树遍历每一实例对象的内存大小。

Memory detection method, device, computer readable storage medium and computer

The present disclosure relates to a memory detection method, a device, a computer readable storage medium and a computer to solve the technical problem of low efficiency in memory analysis due to the intricate reference relationship between the instance objects in the existing technology. The method includes: establishing the reference graph of the instance object, and the dominant tree is calculated by the domination tree algorithm based on the reference relation. In the dominating tree, the root node has the unique path between each node; and the memory size of each instance object is traversed according to the dominant tree.

【技术实现步骤摘要】
内存检测方法、装置、计算机可读存储介质及计算机
本公开涉及应用监控领域,具体地,涉及一种内存检测方法、装置、计算机可读存储介质及计算机。
技术介绍
随着计算机网络技术的高速发展,人们对计算机内存性能的要求越来越高,由于计算机中所有程序的运行都在内存中进行,因此内存性能对计算机是否能够稳定运行有着至关重要的影响。为了保证计算机应用程序的稳定运行,常常需要进行应用程序性能分析,其中内存分析技术是计算机应用程序性能分析的主要技术。然而在现有技术中,面对日益繁复的计算机应用程序,内存的使用和回收趋于复杂多样化,实例对象之间错综的引用关系导致内存分析效率低,难以满足实际分析需求。
技术实现思路
本公开的目的是提供一种内存检测方法、装置、计算机可读存储介质及计算机,用以解决现有技术中由于实例对象之间错综的引用关系而导致内存分析效率低的技术问题。为了实现上述目的,本公开第一方面提供一种内存检测方法,包括:建立实例对象的引用关系有向图;根据所述引用关系有向图利用支配树算法计算得到支配树,其中,在所述支配树中,根节点到每一子节点之间有唯一路径;根据所述支配树遍历每一所述实例对象的内存大小。可选地,所述方法包括:在发生预设触发事件时,在线检测每一实例对象的内存大小,所述预设触发事件包括实例对象之间的引用关系发生变化,和/或,预设定时器超时。可选地,所述方法应用于计算机运行的JAVA虚拟机,所述实例对象为JAVA实例,所述建立实例对象的引用关系有向图,包括:根据JAVA反射机制建立所述JAVA虚拟机上每一JAVA实例之间的引用关系有向图。可选地,所述根据所述支配树遍历每一所述实例对象的内存大小,包括:从对象头、实例数据和对齐填充区域统计每一所述实例对象的内存大小。可选地,所述方法还包括:确定每一所述实例对象的内存大小为在所述支配树上该实例对象所支配的所有实例对象的内存大小之和。本公开第二方面提供一种内存检测装置,包括:有向图建立模块,用于建立实例对象的引用关系有向图;支配树计算模块,用于根据所述引用关系有向图利用支配树算法计算得到支配树,其中,在所述支配树中,根节点到每一子节点之间有唯一路径;遍历模块,用于根据所述支配树遍历每一所述实例对象的内存大小。可选地,所述装置包括:检测模块,用于在发生预设触发事件时,在线检测每一实例对象的内存大小,所述预设触发事件包括实例对象之间的引用关系发生变化,和/或,预设定时器超时。可选地,所述装置应用于计算机运行的JAVA虚拟机,所述实例对象为JAVA实例,所述有向图建立模块用于:根据JAVA反射机制建立所述JAVA虚拟机上每一JAVA实例之间的引用关系有向图。可选地,所述遍历模块用于从对象头、实例数据和对齐填充区域统计每一所述实例对象的内存大小。可选地,所述装置还包括:确定模块,用于确定每一所述实例对象的内存大小为在所述支配树上该实例对象所支配的所有实例对象的内存大小之和。本公开第三方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开第一方面所提供的内存检测方法的步骤。本公开第四方面提供一种计算机,包括:本公开第三方面所提供的计算机可读存储介质;以及一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。在上述技术方案中,通过建立实例对象的引用关系有向图,并根据该引用关系有向图利用支配树算法计算得到支配树,再根据支配树遍历每一所述实例对象的内存大小,这样一来,在此支配树中,根节点到每一子节点之间有唯一路径,上述方法降低了遍历操作的时间复杂度,提高了计算机进行内存分析的效率。本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。附图说明附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:图1是根据一示例性实施例示出的一种内存检测方法的流程图。图2是根据一示例性实施例示出的一种引用关系有向图。图3是根据一示例性实施例示出的另一种引用关系有向图。图4是根据图3利用支配树算法计算所构建的支配树分布图。图5是根据一示例性实施例示出的一种引用关系有向图及其对应的支配树分布图。图6是根据一示例性实施例示出的一种内存检测方法的流程图。图7是根据一示例性实施例示出的一种内存检测方法的流程图。图8是根据一示例性实施例示出的一种内存检测装置的框图。图9是根据一示例性实施例示出的一种内存检测装置的框图。图10是根据一示例性实施例示出的一种内存检测装置的框图。具体实施方式以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。图1是根据一示例性实施例示出的一种内存检测方法的流程图,如图1所示,该方法包括以下步骤:S11、建立实例对象的引用关系有向图。在创建一个实例对象之后,根据该实例对象与其他实例对象或者属性之间的引用关系,将实例对象或者属性作为图的顶点,引用关系作为图的有向边,建立各实例对象或属性的引用关系有向图。例如,图2是根据一示例性实施例示出的一种引用关系有向图,根据引用关系:实例对象OBJA引用实例对象OBJB和OBJC,OBJD也引用实例对象OBJB和OBJC,建立得到的实例对象的引用关系有向图如图2所示。又例如,图3是根据一示例性实施例示出的另一种引用关系有向图,若实例对象obj0有四个相关属性:obj1、obj2、obj3和obj4,其中,obj3引用obj5和obj6,obj4引用obj6,根据上述引用关系建立得到实例对象的引用关系有向图如图3所示。采用引用关系有向图管理内存中的实例对象具有较高的精度,方便对实例对象执行操作。S12、根据引用关系有向图利用支配树算法计算得到支配树。具体地,在建立引用关系有向图之后,根据该引用关系有向图并利用支配树算法可以计算得到支配树,所构建的支配树体现了各个实例对象之间的支配关系。在一种可能的实施方式中,假设图G=(E,V,r)是含有E条边,V个节点且起点为r的有向图,若每条从r到节点w的路径p都经过节点v(其中v≠w),则称节点v支配节点w,记做v=idom(w),由此可知,如果节点v支配节点w,则节点v支配所有节点w支配的节点。此外,还可以定义节点w的半支配节点sdom(w)为:sdom(w)=min{v|thereisapathv=v0,v1,…,vk=wsuchthatvi>wfor0<i<k}定义函数link(u,v),用于将节点u设为森林中v的父亲节点;定义函数eval(u),用于在节点u为森林中的根节点时,返回节点u,在节点u为森林中的非根节点时,设置根节点为r,并返回森林中的根节点到节点u的路径上深度搜索编号最小的半支配节点。根据上述定义,利用函数link(u,v)和函数eval(u)可以从大到小地求出每个节点w的半支配节点sdom(w),将节点w放入sdom(w)的集合中,记为bucket[sdom(w)],取bucket[fa(w)]中的所有节点x,若sdom(x)<sdom(eval(x)),记idom(x)=eval(x);否则,idom(x)=fa(w),其中,fa(w)本文档来自技高网...
内存检测方法、装置、计算机可读存储介质及计算机

【技术保护点】
一种内存检测方法,其特征在于,包括:建立实例对象的引用关系有向图;根据所述引用关系有向图利用支配树算法计算得到支配树,其中,在所述支配树中,根节点到每一子节点之间有唯一路径;根据所述支配树遍历每一所述实例对象的内存大小。

【技术特征摘要】
1.一种内存检测方法,其特征在于,包括:建立实例对象的引用关系有向图;根据所述引用关系有向图利用支配树算法计算得到支配树,其中,在所述支配树中,根节点到每一子节点之间有唯一路径;根据所述支配树遍历每一所述实例对象的内存大小。2.根据权利要求1所述的方法,其特征在于,所述方法包括:在发生预设触发事件时,在线检测每一实例对象的内存大小,所述预设触发事件包括实例对象之间的引用关系发生变化,和/或,预设定时器超时。3.根据权利要求1所述的方法,其特征在于,所述方法应用于计算机运行的JAVA虚拟机,所述实例对象为JAVA实例,所述建立实例对象的引用关系有向图,包括:根据JAVA反射机制建立所述JAVA虚拟机上每一JAVA实例之间的引用关系有向图。4.根据权利要求3所述的方法,其特征在于,所述根据所述支配树遍历每一所述实例对象的内存大小,包括:从对象头、实例数据和对齐填充区域统计每一所述实例对象的内存大小。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:确定每一所述实例对象的内存大小为在所述支配树上该实例对象所支配的所有实例对象的内存大小...

【专利技术属性】
技术研发人员:孙木鑫石子凡许力
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:辽宁,21

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

1