CN107122247B - 一种静态占用图片的检测方法和装置 - Google Patents

一种静态占用图片的检测方法和装置 Download PDF

Info

Publication number
CN107122247B
CN107122247B CN201710289349.5A CN201710289349A CN107122247B CN 107122247 B CN107122247 B CN 107122247B CN 201710289349 A CN201710289349 A CN 201710289349A CN 107122247 B CN107122247 B CN 107122247B
Authority
CN
China
Prior art keywords
static
picture
node
information
reference path
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710289349.5A
Other languages
English (en)
Other versions
CN107122247A (zh
Inventor
刘华星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201710289349.5A priority Critical patent/CN107122247B/zh
Publication of CN107122247A publication Critical patent/CN107122247A/zh
Application granted granted Critical
Publication of CN107122247B publication Critical patent/CN107122247B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种静态占用图片的检测方法和装置;本发明实施例采用对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,确定该引用路径是否存在包含静态引用关系的节点,若是,则确定该图片对象标识对应的图片为静态占用图片;该方案可以自动检测静态占用图片,无需人工处理,因此,可以提高静态占用图片的检测速度,进而提高静态占用图片的检测效率。

Description

一种静态占用图片的检测方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种静态占用图片的检测方法和装置。
背景技术
安卓系统中,有些应用程序中的图片会长期占用系统内存资源,消耗大量的内存资源;这些应用程序中的图片可以称为静态占用图片。比如,静态占用图片会在应用程序存活的期间内一直会占用系统内存资源。
为了减低系统内存资源消耗,需要查找出系统内存中的静态占用图片,即检测静态占用图片。目前静态占用图片的检测方式主要是通过人工的方式在内存中查找静态占用图片;具体地,技术人员从内存中查找图片对象,并对图片对象进行分析,从而确定该图片对象对应的图片是否为静态占用图片。
然而,目前静态占用图片的检测方式需要人工参与,人工处理关于比较慢且耗时,因此,会导致检测速度的效率比较低。
发明内容
本发明实施例提供一种静态占用图片的检测方法和装置,可以提高静态占用图片的检测效率。
本发明实施例提供一种静态占用图片的检测方法,包括:
对应用进程的内存使用文件进行解析,得到内存信息,其中,所述内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息;
从所述对象标识信息中获取图片对象标识,并根据所述图片对象标识从所述对象信息中获取相应的图片对象;
从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径;
确定所述引用路径是否存在包含静态引用关系的节点;
若是,则确定所述图片对象标识对应的图片为静态占用图片。
相应的,本发明实施例还提供一种静态占用图片的检测装置,包括:
解析单元,用于对应用进程的内存使用文件进行解析,得到内存信息,其中,所述内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息;
对象获取单元,用于从所述对象标识信息中获取图片对象标识,并根据所述图片对象标识从所述对象信息中获取相应的图片对象;
路径获取单元,用于从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径;
节点确定单元,用于确定所述引用路径是否存在包含静态引用关系的节点;
图片确定单元,用于在节点确定单元确定所述引用路径存在包含静态引用关系的节点时,确定所述图片对象标识对应的图片为静态占用图片。
本发明实施例采用对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,确定该引用路径是否存在包含静态引用关系的节点,若是,则确定该图片对象标识对应的图片为静态占用图片。该方案可以自动检测静态占用图片,无需人工处理,因此,可以提高静态占用图片的检测速度,进而提高静态占用图片的检测效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的静态占用图片的检测方法的流程示意图;
图1b是本发明实施例提供的hprof文件的数据结构示意图;
图1c是本发明实施例提供的对象的数据结构示意图;
图1d是本发明实施例提供的hprof文件中GC Root数据的存储结构示意图;
图1e是本发明实施例提供的引用路径存在弱引用的示意图;
图1f是本发明实施例提供的hprof文件中类的数据结构示意图;
图1g是本发明实施例提供的图片信息的示意图;
图2是本发明实施例提供的静态占用图片的检测方法的另一流程示意图;
图3a是本发明实施例提供的静态占用图片的检测装置的第一种结构示意图;
图3b是本发明实施例提供的静态占用图片的检测装置的第二种结构示意图;
图3c是本发明实施例提供的静态占用图片的检测装置的第三种结构示意图;
图3d是本发明实施例提供的静态占用图片的检测装置的第四种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种静态占用图片的检测方法和装置。以下将分别进行详细说明。
实施例一、
本实施例将从静态占用图片的检测装置的角度进行描述,该检测装置具体可以集成在终端中,该终端可以为电脑、手机等设备。
一种静态占用图片的检测方法,包括:对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,确定该引用路径是否存在包含静态引用关系的节点,若是,则确定该图片对象标识对应的图片为静态占用图片。
如图1a所示,该静态占用图片的检测方法的具体流程可以如下:
101、对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息。
其中,应用进程的内存使用文件可以为安卓系统中的heap dump(堆转储)文件,比如,可以为hprof文件。一个heap dump就是一个程序(如java进程)在某个时间点上的内存快照的快照,可以获知程序的哪些部分正在使用大部分的内存。一般heap dump保存为一种叫做hprof的二进制格式,因此,也称为hprof文件。
比如,当内存使用文件为hprof文件时,可以通过解析工具(如MAT对二进制的hprof文件进行解析,得到相应的内存信息。其中,MAT(Memory Analyzer Tool,内存分析工具)为java堆栈分析工具,用于分析发现和定位内存中的泄露和大开销等内存问题。
本实施例中内存信息可以包括:对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息。该对象标识信息可以包括应用进程内所有对象的对象ID等;该对象信息可以包括:类、成员变量、直接量以及引用值等;该垃圾回收对象到其他对象的引用路径,比如,GC Root到其他对象的引用路径等。
其中,垃圾回收对象可以为系统的垃圾回收(Gabage Collection,GC)机制收集的对象。该垃圾回收机制用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。
垃圾回收机制的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。
该垃圾回收对象可以为安卓系统中的GC Root(Gabage Collection Root),该GCRoot特指的是垃圾收集器(Garbage Collector)的对象,GC会收集那些不是GC roots且没有被GC roots引用的对象。
本实施例中,GC Root可以有以下几种类型:
(1)、Class由System Class Loader/Boot Class Loader加载的类对象,这些对象不会被回收。需要注意的是其它的Class Loader实例加载的类对象不一定是GC root,除非这个类对象恰好是其它形式的GC root;
(2)、Thread线程,激活状态的线程;
(3)、Stack Local栈中的对象。每个线程都会分配一个栈,栈中的局部变量或者参数都是GC root,因为它们的引用随时可能被用到;
(4)、JNI Local JNI中的局部变量和参数引用的对象;可能在JNI中定义的,也可能在虚拟机中定义
(5)、JNI Global JNI中的全局变量引用的对象;同上
(6)、Monitor Used用于保证同步的对象,例如wait(),notify()中使用的对象、锁等。
(7)、Held by JVM JVM持有的对象。JVM为了特殊用途保留的对象,它与JVM的具体实现有关。比如有System Class Loader,一些Exceptions对象,和一些其它的ClassLoader。对于这些类,JVM也没有过多的信息。
本实施例中,垃圾回收对象到其他对象的引用路径为垃圾回收对象到其他对象的引用关系链,如GC Root到对象的引用关系链。该引用路径中包括多个引用对象,这些引用对象称为路径的节点。
本实施例中内存信息除了上述介绍的信息之外,还可以包括线程信息、垃圾回收对象信息如GC Root信息等。
例如,对于Android中的内存dump文件,其可以是一个hprof文件,其中保存了Android JAVA层内存主要信息,包括线程,类,对象,堆栈等。其结构可以参考图1b。在对hprof文件解析得到的内存信息包括:
所有的对象信息,包括:对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值;
所有的类信息,包括classloader(类加载器)、类名称、父类、静态变量等
GC Root到所有的这些对象的引用路径;
线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)。
102、从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象。
其中,图片的格式有多种,比如,可以给为位图(BitMap)格式等。
以安卓系统为例,在解析得到内存信息之后,可以通过MAT中提供的OQL方法来获取图片对应的对象标识,例如,执行获取函数(如select*from instanceofandroid.graphics.Bitmap),便可以从对象标识信息中获得BitMap的对象ID组。
本实施例中,一个对象标识对应一个对象,在获取对象标识后,可以通过图片对象标识来从对象信息中获取相应的图片对象。
比如,参考图1c,为hprof的对象Object结构,可见一个对象ID会唯一标识一个对象,且可以通过该对象ID找到对象存储的信息以及它归属的类和所在堆栈。MAT在解析的时候也会按照该结构存储,所以可以根据获取到的对象ID从对象信息中提取得到各个Bitmap对象。
在得到多个图片对应的对象标识组时,可以根据对象标识组中每个对象标识获取每个图片对应的图片对象。
103、从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径。
垃圾回收对象信息如GC Root信息一般会存在内存使用文件如hprof文件中。如图1d所示,在hprof中垃圾回收对象的数据结构中,记录了每种GC Root对应的对象ID。因此,本实施例可以通过对象标识查找图片对象所在的垃圾回收对象如GC Root,然后,基于该对象与查询到垃圾回收对象,从引用路径信息中获取图片对象到其垃圾回收对象的引用路径。也即步骤“从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径”可以包括:
通过该对象标识查询该图片对象所在的垃圾回收对象;
根据图像对象及其所在的垃圾回收对象,从该引用路径信息中获取该图片对象到其垃圾回收对象的引用路径。
比如,以安卓系统为例,可以在MAT中结合对象结构内的stack frame信息查询得到对象所在的GC Root,以得到各个对象所在的GC Root;具体地,可以利用Snapshot(快照)的获取函数如getPathsFromGCRoots来获取到对象所在的GC Root信息。在图像对象和其所在的GC Root获取的情况下,便可以从GCRoot到对象的引用路径信息中确定该图片对象到其所在的垃圾回收对象的引用路径。
实际应用中,由于引用的多样性,图片对象到其垃圾回收对象的引用路径可能会有多条,因此,本实施例可以从引用路径信息中提取图片对象到其垃圾回收对象的多个引用路径。
104、确定引用路径是否存在包含静态引用关系的节点,若是,则执行步骤105,若否,则结束流程或者执行步骤106。
本实施例,可以通过确定引用路径中节点是否包含静态引用关系的方式来确定图片是否为静态占用图片;也即通过确定引用路径中是否有静态引用对象的方式来确定图片是否静态占用图片;若引用路径中有节点包含静态引用关系,那么可认为图片为静态占用图片。
由于对于弱引用和软引用的对象会在特定时候被GC回收,为了提高检测的准确性,所以在检测时需要排除GC Root Path中包含软/弱引用的引用Path(路径)。也即步骤“从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径”可以包括:
从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,得到引用路径集合;
将该引用路径集合包含弱引用或软引用的引用路径进行去除,得到去除后引用路径集合;
此时,步骤“确定该引用路径是否存在包含静态引用关系的节点”可以包括:
确定该去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点。
其中,软引用(SoftReference):使用SoftReference关联的对象,用来表示一些有用但不是必需的对象,被SoftReference关联的对象,只有在内存不足时才会被垃圾回收。
弱引用(WeakReference):使用WeakReference关联的对象,用来表示非必需的对象,在虚拟机进行垃圾回收时,无论内存是否充足,这类对象都会被回收。
本实施例中,包含弱引用或软引用的引用路径指的是:图片对象到其垃圾回收对象之间的对象(即节点)包含弱引用或软引用的引用路径的引用路径。以安卓系统为例,可以去除从BitMap对象到GC Root对象之间的对象里面存在"java.lang.ref.WeakReference:referent","java.lang.ref.SoftReference:referent"类型的Path。
在进行路径去除之后,如果引用路径集合为空,则说明对象的引用只存在软/弱引用,此时,可以确定对象标识对应的图片不为静态占用图片;如果引用路径集合不为空,则从确定该集合内相应的引用路径是否存在包含静态引用关系的节点,以确定对象标识对应的图片是否为静态占用图片。
参考图1e,BitMap对象到GC Root对象之间的对象存在一个弱引用,那么此时,便可以将BitMap对象到GC Root对象的引用路径去除。
本实施例中,确定引用路径是否存在包含静态引用关系的节点的方式可以有多种,比如,可以遍历每个节点,以确定节点是否包含静态引用关系,从而确定引用路径存在静态引用关系的节点。该步骤“确定该去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点”可以包括:
从去除后引用路径集合中选取相应的目标引用路径;
从该目标引用路径中选取相应的节点,以作为当前节点;并获取该当前节点的下一个节点;
从该内存信息中获取该当前节点的静态属性,得到静态属性集合;
确定该静态属性集合是否包括引用该下一个节点的静态属性;
若是,则确定该当前节点为包含静态引用关系的目标节点,并确定该目标引用路径存在包含静态引用关系的目标节点。
本实施例在确定静态属性集合不包括引用该下一个节点的静态属性时,可以返回执行步骤“从该目标引用路径中选取相应的节点,以作为当前节点;并获取该当前节点的下一个节点”,直到该目标路径上的节点均被选取。
一般来说,如果某条路径上的某个节点(即对象)包含静态引用关系时,那么该节点的静态属性(static field)中会包含一个引用下一个节点的静态属性(static field),即该包含一个指向下一个节点的静态属性。因此,本实施例中可以通过确定节点的静态属性是否包含引用下一个节点的静态属性,以确定该节点是否具有静态引用关系,进而确定该节点所在的路径是否存在包含静态引用关系的节点。
比如,对于某个引用路径,可以遍历该引用路径上的节点,当遍历到某个节点时,将当前遍历到的节点作为当前节点(current_entry),并获取当前节点的下一个节点(next_entry);然后,从内存信息中获取该节点的静态属性集合,然后,确定该静态属性集合是否存在引用下一个节点的静态属性,若是,则确定当前节点为包含静态引用关系的目标节点,此时结束遍历,若否,则遍历当前节点的下一个节点,将遍历到的节点作为当前节点,重复执行前述过程,直到遍历完该路径上所有的节点为止。
例如,某个引用路径包括n个对象节点,此时,可以先遍历第1个节点,确定第1个节点的静态属性集合是否存在引用第2个节点的静态属性,若是,则确定第1个节点为包含静态引用关系的目标节点,结束遍历;若否,则遍历第2个节点,确定第2个节点的静态属性集合是否存在引用第3个节点的静态属性,若是,则确定第2个节点为包含静态引用关系的目标节点,结束遍历;若否,……依次类推,遍历第i个节点,确定第i个节点的静态属性集合是否存在引用第3个节点的静态属性,若是,则确定第i个节点为包含静态引用关系的目标节点,结束遍历;若否,则一直遍历到第n个对象节点结束。
其中,步骤“确定该静态属性集合是否包括引用该下一个节点的静态属性”可以包括:
从该静态属性集合中读取当前需要处理的静态属性,得到当前静态属性;
判断当前静态属性的类型是否为引用类型;
若为引用类型,则判断当前静态属性的属性值是否与该下一个节点的地址值相同,若相同,则确定当前静态属性为引用该下一个节点的静态属性,进而确定该静态属性集合包括引用该下一个节点的静态属性;若不相同,则从该静态属性集合中读取该当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤;
若不为引用类型,则从该述静态属性集合中读取该当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤。
例如,以某个引用路径上的第i个节点为例,当遍历到第i个节点时,可以将该第i个节点作为current_entry,并将第i+1个节点作为next_entry;此时,可以获取current_entry的静态属性,得到静态属性集合{static field 1、static field2……static fieldj……static field m};遍历静态属性集合中的static field;遍历到static field1时,判断static field1是否为引用类型(ref),若为ref,则确定static field1的属性值是否与第i+1个节点的地址值相同,若相同,则确定static field1为引用下一个节点的staticfield,结束遍历;若不相同,或若static field1不为ref,则遍历下一个静态属性staticfield2,判断static field2是否为引用类型(ref),若为ref,则确定static field2的属性值是否与第i+2个节点的地址值相同,若相同,确定static field2为引用下一个节点的static field,结束遍历;若不相同,或若static field2不为ref,则遍历下一个静态属性,以此类推,直到遍历到static field m结束、或者出现类型为ref,且属性值为下一个节点的地址值的static field结束遍历。
本实施例中,路径中节点的静态属性信息可以从解析后内存信息中得到。比如,以安卓系统为例,在hprof文件中已提供对象的静态属性信息,参考图1f,hprof文件的classdump数据结构中保存有对象的static属性信息;因此,可以在对hprof文件解析得到内存信息后,从内存信息中获取路径上节点即对象的static属性信息。
实际应用中,当遍历到引用路径的某个节点时,假设该节点有static field,那么则遍历各个static属性并判断遍历到的属性是否为ref(引用类型)。因为非引用类型不会进入GC Root Path,成为引用链中的一节。如果不是ref类型则继续遍历下一个静态属性;如果是ref类型则判断该静态属性存储子和next_entry的地址值是否一致,如果一致则确定该静态属性为引用下一个节点的静态属性,即静态引用属性,进而确定该节点为包含静态引用关系的节点,结束遍历;若不一致则继续遍历下一个静态属性。
105、确定该图片对象标识对应的图片为静态占用图片。
106、确定该图片对象标识对应的图片不为静态占用图片。
可选地,为便于对静态占用图片进行定位分析,本实施例方法还可以输出静态占用图片的定位分析信息,该定位分析信息可以包括:静态变量名、图片信息以及调用堆栈信息等。
比如,本实施例的检测方法还可以包括:
当确定该引用路径存在包含静态引用关系的节点时,记录该对象标识、以及该节点中静态变量名,该静态变量名为该节点中引用下一个节点的静态属性的名称;
当静态占用图片检测完成时,输出该静态占用图片的定位分析信息,其中,该定位分析信息包括:该静态变量名、该对象标识对应的图片信息、该对象标识对应的调用堆栈信息中的至少两种。
例如,当前图片对象标识为ID1时,此时,可以获取ID1对应的图片对象Object1,然后,获取图片对象Object1到其GC Root的路径route1,遍历路径route1中每个节点,当遍历到节点A时,获取节点A的static field,遍历节点A的static field;如果节点A的staticfield中static field 1引用下个节点B时,那么可以确定该图片对象标识ID1对应的图片1为静态占用图片,并记录该图片对象标识ID1,以及静态变量名static field 1。当完成检测时,可以输出静态变量名static field 1、图片1的图片信息、以及图片对象标识ID1对应的调用堆栈信息,以供静态占用图片的定位分析。
其中,图片信息包括图片内容、图片名称、图片格式等信息,通过上述检测过程,可以确定0x12c0a190.bmp为静态占用图片,可以输出如图1g所示的图片信息。
实际应用中,在获取多个图片对象标识的情况下,可以针对每个图片对象标识执行上述步骤以确定各图片对象标识对应的图片是否为静态占用图片,若是,则记录当前的图片对象标识及其对应的静态变量名,并添加到检测结果集合中;当检测完成所有的图片对象标识时,可以输出该检测结果集合中图片对象标识对应的调用堆栈信息、图片对象标识对应的图片信息、以及静态变量名等,以便用户进行静态占用图片的定位和分析。
为了提高检测的静态占用图片的定位分析的准确性,本实施例还可以对检测结果集合进行白名单(静态变量名、引用链关键字过滤等)过滤,得到过滤后检测结果集合,然后,输出过滤后检测结果集合中图片对象标识对应的调用堆栈信息、图片对象标识对应的图片信息、以及静态变量名等,以便用户进行静态占用图片的定位和分析。
由上可知,本发明实施例采用对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,确定该引用路径是否存在包含静态引用关系的节点,若是,则确定该图片对象标识对应的图片为静态占用图片。该方案可以自动检测静态占用图片,无需人工处理,因此,在面临大量图片时,可以提高静态占用图片的检测速度、以及避免漏检测图片的情况,进而提高静态占用图片的检测效率和检测全面性。
此外,该方案无需依赖于检测人员的分析经验,可以避免由于检测人员缺乏分析经验导致误判断静态占用图片的情况,可以提高静态占用图片的检测准确性。
实施例二、
根据实施例一所描述的方法,将通过举例来进一步说明。
本实施例将以检测安卓系统中的静态占用图片为例,来对本发明提供的检测方法来详细说明。
如图2所示,本发明提供了一种静态占用图片的检测方法,具体流程如下:
201、对应用进程的内存使用文件进行解析,得到内存信息。
其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息。
该应用进程的内存使用文件可以hprof文件。此时,可以通过MAT对二进制的hprof文件进行解析,得到相应的内存信息。
例如,对hprof文件解析可以得到以下内存信息,包括:
所有的对象信息,包括:对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值;
所有的类信息,包括classloader(类加载器)、类名称、父类、静态变量等
GC Root到所有的这些对象的引用路径;
线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)。
202、从内存信息中获取图片对象id,得到图片对象id集合。
比如,利用OQL可以从内存信息中获取到图片对象的图片对象标识;例如,执行获取函数(如select*from instanceof android.graphics.Bitmap),便可以从对象标识信息中获得BitMap的对象id组,该id组包括多个Bitmap(位图)的对象id。
203、判断遍历对象id集合是否结束,若否,则执行步骤204,若是,则执行步骤219。
204、遍历对象id集合内相应的对象id,并通过当前遍历到的对象id从内存信息中获取相应的图片对象。
比如,当遍历到对象id集合内的对象id1时,可以从内存信息中获取对象id1对应的Bitmap对象1。
具体地,可以根据对象标识从内存信息中的对象信息中获取相应的图片对象。
205、根据当前遍历到的对象id查询该图片对象到其GC Root的引用路径。
例如,通过当前遍历到的对象id查询该图片对象所在的GC Root,然后,通过该图片对象及其所在的GC Root,从引用路径信息中获取该图片对象到其GC Root的引用路径。
206、将该引用路径中包含弱引用或软引用的引用路径进行去除。
由于对于弱引用和软引用的对象会在特定时候被GC回收,所以在调用时候要排除GC Root Path中包含软/弱引用的Path,即从BitMap对象到GC Root对象之间的对象里面存在"java.lang.ref.WeakReference:referent","java.lang.ref.SoftReference:referent"类型的Path。
207、确定图片对象到其GC Root的引用路径是否为空,若否,则执行步骤208,若是,则执行步骤218。
本实施例中,在排除了软/弱引用后的GC Root Path,如果为空,那么说明该对象的引用只存在软/弱引用。那么取下个Bitmap的Id返回执行步骤203。
如果排除了软/弱引用后的GC Root Path不为空,那么执行步骤208获取该Path中第一个节点为current_entry,第二个节点为next_entry。
208、确定遍历引用路径中的节点是否结束,若否,则执行步骤209,若是,则执行步骤217。
209、获取当前遍历到的节点,以作为current_entry。
例如,当前遍历到路径的第一个节点,那么可以将第一个节点作为current_entry。
210、获取current_entry的下一个节点,以作为next_entry。
当遍历到路径的第一节点时,可以将其下一个节点,即第二个节点作为next_entry。
211、获取current_entry的静态属性static field。
212、确定遍历static field是否结束,若否,则执行步骤213,若是,则执行217。
213、确定当前遍历到的static field是否为ref类型,若是,则执行步骤214,若否,则执行步骤216。
214、确定当前遍历到的static field的值是否与next_entry的地址值相同,若是,则执行步骤215,若否,则执行步骤216。
如果current_entry中没有继续可取static属性则取GC Root Path中下一个节点作为current_entry,返回步骤208。
如果有static属性,这遍历各个属性并判断取到的属性是否为ref(引用类型)。因为非引用类型不会进入GC Root Path,成为引用链中的一节。如果不是ref类型则继续遍历;如果是ref类型则判断该静态属性存储子和next_entry的地址值是否一致,如果一致则记录保存(保存静态变量名以及对应的Bitmap的id),不一致则继续取下一个静态属性。
如果是静态引用的话那么current_entry所属的类中存在一个static的属性且该属性的值保存的是next_entry。所以就要获取current_entry中的所有static属性。在hprof中已提供该信息,所以在MAT解析后也可以从解析结果中得到。
215、确定当前遍历到的对象id对应的图片为静态占用图片,并记该对象id以及当前遍历到的static field的名称到结果队列中。
比如,可以记录当前遍历到的Bitmap对象的id及其对应的static field的名称到结果队列BitmapToStaticlist中。
216、遍历下一个static field,并返回执行步骤212。
217、遍历下一个节点,并返回执行步骤208。
218、遍历下一个对象id,并返回执行步骤203。
219、按照白名单对结果队列中的信息进行过滤,得到过滤后结果队列。
220、输出过滤后结果队列中静态变量名、对象id对应的图片信息、对象id对应的调用堆栈信息。
当全部BitMap的对象id遍历结束后就可以得到被静态变量引用的所有Bitmap了。然后将该集合通过白名单过滤(包括静态变量名过滤、引用链关键字过滤等),就可以得到最终我们需要关注的被静态变量引用的图片信息,然后输出该静态变量、堆栈信息、GCRoot Path、图片信息等以供定位分析。
由上可知,本发明实施例采用对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,确定该引用路径是否存在包含静态引用关系的节点,若是,则确定该图片对象标识对应的图片为静态占用图片。该方案可以自动检测静态占用图片,无需人工处理,因此,在面临大量图片时,可以提高静态占用图片的检测速度、以及避免漏检测图片的情况,进而提高静态占用图片的检测效率和检测全面性。
此外,该方案无需依赖于检测人员的分析经验,可以避免由于检测人员缺乏分析经验导致误判断静态占用图片的情况,可以提高静态占用图片的检测准确性。
实施例三、
为了更好地实施以上方法,本发明实施例还提供静态占用图片的检测装置,如图3a所示,该静态占用图片的检测装置可以包括:解析单元301、对象获取单元302、路径获取单元303、节点确定单元304和图片确定单元305,如下:
(1)解析单元301;
解析单元301,用于对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息。
其中,应用进程的内存使用文件可以为安卓系统中的heap dump(堆转储)文件,比如,可以为hprof文件。一个heap dump就是一个程序(如java进程)在某个时间点上的内存快照的快照,可以获知程序的哪些部分正在使用大部分的内存。一般heap dump保存为一种叫做hprof的二进制格式,因此,也称为hprof文件。
比如,当内存使用文件为hprof文件时,解析单元301可以通过解析工具(如MAT对二进制的hprof文件进行解析,得到相应的内存信息。
该对象标识信息可以包括应用进程内所有对象的对象ID等;该对象信息可以包括:类、成员变量、直接量以及引用值等;该垃圾回收对象到其他对象的引用路径,比如,GCRoot到其他对象的引用路径等。
其中,垃圾回收对象可以为系统的垃圾回收(Gabage Collection,GC)机制收集的对象。该垃圾回收机制用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。
本实施例中,垃圾回收对象到其他对象的引用路径为垃圾回收对象到其他对象的引用关系链,如GC Root到对象的引用关系链。该引用路径中包括多个引用对象,这些引用对象称为路径的节点。
本实施例中内存信息除了上述介绍的信息之外,还可以包括线程信息、垃圾回收对象信息如GC Root信息等。
例如,对于Android中的内存dump文件,其可以是一个hprof文件,其中保存了Android JAVA层内存主要信息,包括线程,类,对象,堆栈等。其结构可以参考图1b。在对hprof文件解析得到的内存信息包括:
所有的对象信息,包括:对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的引用值;
所有的类信息,包括classloader(类加载器)、类名称、父类、静态变量等GC Root到所有的这些对象的引用路径;
线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)。
(2)对象获取单元302;
对象获取单元302,用于从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象。
其中,图片的格式有多种,比如,可以给为位图(BitMap)格式等。
以安卓系统为例,在解析得到内存信息之后,对象获取单元302可以通过MAT中提供的OQL方法来获取图片对应的对象标识,例如,对象获取单元302执行获取函数(如select*from instanceof android.graphics.Bitmap),便可以从对象标识信息中获得BitMap的对象ID组。
(3)路径获取单元303;
路径获取单元303,用于从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径。
垃圾回收对象信息如GC Root信息一般会存在内存使用文件如hprof文件中。如图1d所示,在hprof中垃圾回收对象的数据结构中,记录了每种GC Root对应的对象ID。因此,本实施例可以路径获取单元303可以通过对象标识查找图片对象所在的垃圾回收对象如GCRoot,然后,基于该对象与查询到垃圾回收对象,从引用路径信息中获取图片对象到其垃圾回收对象的引用路径。
此时,路径获取单元303可以用于:通过该对象标识查询该图片对象所在的垃圾回收对象;根据图像对象及其所在的垃圾回收对象,从该引用路径信息中获取该图片对象到其垃圾回收对象的引用路径。
由于对于弱引用和软引用的对象会在特定时候被GC回收,为了提高检测的准确性,所以在检测时需要排除GC Root Path中包含软/弱引用的引用Path(路径)。可选地,参考图3b,路径获取单元303可以包括:
路径获取子单元3031,用于从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,得到引用路径集合;
路径去除子单元3032,用于将该引用路径集合包含弱引用或软引用的引用路径进行去除,得到去除后引用路径集合。
(4)节点确定单元304;
节点确定单元304,用于确定该引用路径是否存在包含静态引用关系的节点。
比如,在路径获取单元303得到去除后引用路径集合的情况下,节点确定单元304,可以具体用于确定该去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点。
本实施例中,确定引用路径是否存在包含静态引用关系的节点的方式可以有多种,比如,可以遍历每个节点,以确定节点是否包含静态引用关系,从而确定引用路径存在静态引用关系的节点。
可选地,参考图3c,该节点确定单元304可以包括:
路径选取子单元3041,用于从去除后引用路径集合中选取相应的目标引用路径;
节点选取子单元3042,用于从该目标引用路径中选取相应的节点,以作为当前节点;并获取该当前节点的下一个节点;
属性获取子单元3043,用于从该内存信息中获取该当前节点的静态属性,得到静态属性集合;
引用属性确定子单元3044,用于确定该静态属性集合是否包括引用该下一个节点的静态属性,若是,则确定该当前节点为包含静态引用关系的节点,并确定该目标引用路径存在包含静态引用关系的节点。
一般来说,如果某条路径上的某个节点(即对象)包含静态引用关系时,那么该节点的静态属性(static field)中会包含一个引用下一个节点的静态属性(static field),即该包含一个指向下一个节点的静态属性。因此,本实施例中可以通过确定节点的静态属性是否包含引用下一个节点的静态属性,以确定该节点是否具有静态引用关系,进而确定该节点所在的路径是否存在包含静态引用关系的节点。
比如,该引用属性确定子单元3044,可以用于:
从该静态属性集合中读取当前需要处理的静态属性,得到当前静态属性;
判断当前静态属性的类型是否为引用类型;
若为引用类型,则判断当前静态属性的属性值是否与该下一个节点的地址值相同,若相同,则确定当前静态属性为引用该下一个节点的静态属性,进而确定该静态属性集合包括引用该下一个节点的静态属性;若不相同,则从该述静态属性集合中读取该当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤;
若不为引用类型,则从该静态属性集合中读取该当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤。
(5)图片确定单元305;
图片确定单元305,用于在节点确定单元确定该引用路径存在包含静态引用关系的节点时,确定该图片对象标识对应的图片为静态占用图片。
可选地,为便于对静态占用图片进行定位分析,本实施例方法还可以输出静态占用图片的定位分析信息,该定位分析信息可以包括:静态变量名、图片信息以及调用堆栈信息等。
比如,参考图3d,在上述单元的基础上,本实施例的检测装置还可以包括:
记录单元306,用于当确定该引用路径存在包含静态引用关系的节点时,记录该对象标识、以及该节点中静态变量名,该静态变量名为该节点中引用下一个节点的静态属性的名称;
输出单元307,用于当静态占用图片检测完成时,输出该静态占用图片的定位分析信息,其中,该定位分析信息包括:该静态变量名、该对象标识对应的图片信息、该对象标识对应的调用堆栈信息中的至少两种。
其中,图片信息包括图片内容、图片名称、图片格式等信息,通过上述检测过程,可以确定0x12c0a190.bmp为静态占用图片,可以输出如图1g所示的图片信息。
实际应用中,在获取多个图片对象标识的情况下,可以针对每个图片对象标识执行上述步骤以确定各图片对象标识对应的图片是否为静态占用图片,若是,则记录当前的图片对象标识及其对应的静态变量名,并添加到检测结果集合中;当检测完成所有的图片对象标识时,可以输出该检测结果集合中图片对象标识对应的调用堆栈信息、图片对象标识对应的图片信息、以及静态变量名等,以便用户进行静态占用图片的定位和分析。
为了提高检测的静态占用图片的定位分析的准确性,本实施例输出单元307还可以对检测结果集合进行白名单(静态变量名、引用链关键字过滤等)过滤,得到过滤后检测结果集合,然后,输出过滤后检测结果集合中图片对象标识对应的调用堆栈信息、图片对象标识对应的图片信息、以及静态变量名等,以便用户进行静态占用图片的定位和分析。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
该静态占用图片的检测装置具体集成在终端,如笔记本电脑、平板电脑等设备中。
由上可知,本发明实施例采用解析单元301对应用进程的内存使用文件进行解析,得到内存信息,其中,该内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息,然后,由对象获取单元302从该对象标识信息中获取图片对象标识,并根据该图片对象标识从该对象信息中获取相应的图片对象,由路径获取单元303从该引用路径信息中,获取该图片对象到其垃圾回收对象的引用路径,由节点确定单元304确定该引用路径是否存在包含静态引用关系的节点,若是,则由图片确定单元305确定该图片对象标识对应的图片为静态占用图片。该方案可以自动检测静态占用图片,无需人工处理,因此,在面临大量图片时,可以提高静态占用图片的检测速度、以及避免漏检测图片的情况,进而提高静态占用图片的检测效率和检测全面性。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
以上对本发明实施例所提供的一种静态占用图片的检测方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种静态占用图片的检测方法,其特征在于,包括:
对应用进程的内存使用文件进行解析,得到内存信息,其中,所述内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息;
从所述对象标识信息中获取图片对象标识,并根据所述图片对象标识从所述对象信息中获取相应的图片对象;
从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径;
确定所述引用路径是否存在包含静态引用关系的节点,所述静态引用关系为静态引用所述引用路径中所述节点的下一节点的引用关系;
若是,则确定所述图片对象标识对应的图片为静态占用图片,所述静态占用图片为应用程序存活期间内一直占用系统内存资源的图片。
2.如权利要求1所述的检测方法,其特征在于,从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径,包括:
从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径,得到引用路径集合;
将所述引用路径集合包含弱引用或软引用的引用路径进行去除,得到去除后引用路径集合;
确定所述引用路径是否存在包含静态引用关系的节点,包括:
确定所述去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点。
3.如权利要求2所述的检测方法,其特征在于,确定所述去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点,包括:
从去除后引用路径集合中选取相应的目标引用路径;
从所述目标引用路径中选取相应的节点,以作为当前节点;并获取所述当前节点的下一个节点;
从所述内存信息中获取所述当前节点的静态属性,得到静态属性集合;
确定所述静态属性集合是否包括引用所述下一个节点的静态属性;
若是,则确定所述当前节点为包含静态引用关系的节点,并确定所述目标引用路径存在包含静态引用关系的节点。
4.如权利要求3所述的检测方法,其特征在于,确定所述静态属性集合是否包括引用所述下一个节点的静态属性,包括:
从所述静态属性集合中读取当前需要处理的静态属性,得到当前静态属性;
判断当前静态属性的类型是否为引用类型;
若为引用类型,则判断当前静态属性的属性值是否与所述下一个节点的地址值相同,若相同,则确定当前静态属性为引用所述下一个节点的静态属性,进而确定所述静态属性集合包括引用所述下一个节点的静态属性;若不相同,则从所述述静态属性集合中读取所述当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤;
若不为引用类型,则从所述静态属性集合中读取所述当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤。
5.如权利要求1-4任一项所述的检测方法,其特征在于,所述检测方法还包括:
当确定所述引用路径存在包含静态引用关系的节点时,记录所述对象标识、以及该节点中静态变量名,所述静态变量名为该节点中引用下一个节点的静态属性的名称;
当静态占用图片检测完成时,输出所述静态占用图片的定位分析信息,其中,所述定位分析信息包括:所述静态变量名、所述对象标识对应的图片信息、所述对象标识对应的调用堆栈信息中的至少两种。
6.如权利要求1-4任一项所述的检测方法,其特征在于,从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径,包括:
通过所述对象标识查询所述图片对象所在的垃圾回收对象;
根据图像对象及其所在的垃圾回收对象,从所述引用路径信息中获取所述图片对象到其垃圾回收对象的引用路径。
7.一种静态占用图片的检测装置,其特征在于,包括:
解析单元,用于对应用进程的内存使用文件进行解析,得到内存信息,其中,所述内存信息包括对象标识信息、对象信息、以及垃圾回收对象到其他对象的引用路径信息;
对象获取单元,用于从所述对象标识信息中获取图片对象标识,并根据所述图片对象标识从所述对象信息中获取相应的图片对象;
路径获取单元,用于从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径;
节点确定单元,用于确定所述引用路径是否存在包含静态引用关系的节点,所述静态引用关系为静态引用所述引用路径中所述节点的下一节点的引用关系;
图片确定单元,用于在节点确定单元确定所述引用路径存在包含静态引用关系的节点时,确定所述图片对象标识对应的图片为静态占用图片,所述静态占用图片为应用程序存活期间内一直占用系统内存资源的图片。
8.如权利要求7所述的检测装置,其特征在于,所述路径获取单元,包括:
路径获取子单元,用于从所述引用路径信息中,获取所述图片对象到其垃圾回收对象的引用路径,得到引用路径集合;
路径去除子单元,用于将所述引用路径集合包含弱引用或软引用的引用路径进行去除,得到去除后引用路径集合;
所述节点确定单元,用于确定所述去除后引用路径集合中相应的目标引用路径是否存在包含静态引用关系的节点。
9.如权利要求8所述的检测装置,其特征在于,所述节点确定单元,包括:
路径选取子单元,用于从去除后引用路径集合中选取相应的目标引用路径;
节点选取子单元,用于从所述目标引用路径中选取相应的节点,以作为当前节点;并获取所述当前节点的下一个节点;
属性获取子单元,用于从所述内存信息中获取所述当前节点的静态属性,得到静态属性集合;
引用属性确定子单元,用于确定所述静态属性集合是否包括引用所述下一个节点的静态属性,若是,则确定所述当前节点为包含静态引用关系的节点,并确定所述目标引用路径存在包含静态引用关系的节点。
10.如权利要求9所述的检测装置,其特征在于,引用属性确定子单元,用于:
从所述静态属性集合中读取当前需要处理的静态属性,得到当前静态属性;
判断当前静态属性的类型是否为引用类型;
若为引用类型,则判断当前静态属性的属性值是否与所述下一个节点的地址值相同,若相同,则确定当前静态属性为引用所述下一个节点的静态属性,进而确定所述静态属性集合包括引用所述下一个节点的静态属性;若不相同,则从所述述静态属性集合中读取所述当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤;
若不为引用类型,则从所述静态属性集合中读取所述当前需要处理的静态属性的下一个静态属性,作为当前静态属性,并返回执行判断当前静态属性的类型是否为引用类型的步骤。
11.如权利要求7-10任一项所述的检测装置,其特征在于,还包括:
记录单元,用于当确定所述引用路径存在包含静态引用关系的节点时,记录所述对象标识、以及该节点中静态变量名,所述静态变量名为该节点中引用下一个节点的静态属性的名称;
输出单元,用于当静态占用图片检测完成时,输出所述静态占用图片的定位分析信息,其中,所述定位分析信息包括:所述静态变量名、所述对象标识对应的图片信息、所述对象标识对应的调用堆栈信息中的至少两种。
12.如权利要求7-10任一项所述的检测装置,其特征在于,所述路径获取单元,用于:
通过所述对象标识查询所述图片对象所在的垃圾回收对象;
根据图像对象及其所在的垃圾回收对象,从所述引用路径信息中获取所述图片对象到其垃圾回收对象的引用路径。
CN201710289349.5A 2017-04-27 2017-04-27 一种静态占用图片的检测方法和装置 Active CN107122247B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710289349.5A CN107122247B (zh) 2017-04-27 2017-04-27 一种静态占用图片的检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710289349.5A CN107122247B (zh) 2017-04-27 2017-04-27 一种静态占用图片的检测方法和装置

Publications (2)

Publication Number Publication Date
CN107122247A CN107122247A (zh) 2017-09-01
CN107122247B true CN107122247B (zh) 2021-11-02

Family

ID=59725415

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710289349.5A Active CN107122247B (zh) 2017-04-27 2017-04-27 一种静态占用图片的检测方法和装置

Country Status (1)

Country Link
CN (1) CN107122247B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109947407B (zh) * 2019-03-07 2022-07-26 腾讯科技(北京)有限公司 一种数据获取方法及装置
CN112835813A (zh) * 2021-03-04 2021-05-25 腾讯音乐娱乐科技(深圳)有限公司 处理内存中重复图片的方法、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011034305A (ja) * 2009-07-31 2011-02-17 Ricoh Co Ltd 画像形成装置、ガーベージコレクション機能の発生制御方法、プログラム、および記憶媒体
CN102270134A (zh) * 2011-08-09 2011-12-07 北京握奇数据系统有限公司 一种Java卡中垃圾回收的方法及装置
CN104598809A (zh) * 2015-02-13 2015-05-06 北京奇虎科技有限公司 程序的监控方法及其防御方法以及相关装置
CN104808952A (zh) * 2015-05-05 2015-07-29 百度在线网络技术(北京)有限公司 数据缓存方法及装置
CN105573811A (zh) * 2015-12-15 2016-05-11 广州品唯软件有限公司 系统内存控制方法及其系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8266419B2 (en) * 2009-11-25 2012-09-11 Sprint Communications Company L.P. Fast restart on a virtual machine

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011034305A (ja) * 2009-07-31 2011-02-17 Ricoh Co Ltd 画像形成装置、ガーベージコレクション機能の発生制御方法、プログラム、および記憶媒体
CN102270134A (zh) * 2011-08-09 2011-12-07 北京握奇数据系统有限公司 一种Java卡中垃圾回收的方法及装置
CN104598809A (zh) * 2015-02-13 2015-05-06 北京奇虎科技有限公司 程序的监控方法及其防御方法以及相关装置
CN104808952A (zh) * 2015-05-05 2015-07-29 百度在线网络技术(北京)有限公司 数据缓存方法及装置
CN105573811A (zh) * 2015-12-15 2016-05-11 广州品唯软件有限公司 系统内存控制方法及其系统

Also Published As

Publication number Publication date
CN107122247A (zh) 2017-09-01

Similar Documents

Publication Publication Date Title
US8429620B2 (en) Memory leak diagnosis
CN108628751B (zh) 一种无用依赖项检测方法及装置
US10909029B2 (en) Managing memory in a computer system
US9003240B2 (en) Blackbox memory monitoring with a calling context memory map and semantic extraction
US7765375B2 (en) Memory management method, information processing apparatus, and memory management program
US10102046B2 (en) In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
CN111752955A (zh) 数据处理方法、装置、设备及计算机可读存储介质
CN107122247B (zh) 一种静态占用图片的检测方法和装置
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
US8176286B2 (en) Memory recycling in computer systems
CN107169057B (zh) 一种重复图片的检测方法和装置
CN112579146A (zh) 接口变化的检测方法及装置
CN111949354B (zh) 一种页面内容更新方法及装置
CN106354624B (zh) 一种自动化测试方法和装置
CN108121602B (zh) 一种确定垃圾收集触发点的方法、电子设备及存储介质
CN110727565B (zh) 一种网络设备平台信息收集方法及系统
US9460002B1 (en) Memory allocation
CN109101297B (zh) 一种页面的标识方法及装置
CN110471764A (zh) 一种内存清理的处理方法及装置
US9760388B1 (en) Memory monitoring tool
CN114936269A (zh) 文档搜索平台、搜索方法、装置、电子设备及存储介质
CN107656868B (zh) 一种利用线程私有数据获取线程名字的调试方法及系统
CN116340270B (zh) 并发遍历枚举方法、装置、设备及存储介质
CN117891524A (zh) 一种前端应用管理方法及系统
CN106372047B (zh) 大数据报表导出方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant