CN106909458A - 内存管理方法及装置 - Google Patents

内存管理方法及装置 Download PDF

Info

Publication number
CN106909458A
CN106909458A CN201510981811.9A CN201510981811A CN106909458A CN 106909458 A CN106909458 A CN 106909458A CN 201510981811 A CN201510981811 A CN 201510981811A CN 106909458 A CN106909458 A CN 106909458A
Authority
CN
China
Prior art keywords
memory
internal memory
function
ems
anonymous
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.)
Pending
Application number
CN201510981811.9A
Other languages
English (en)
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.)
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201510981811.9A priority Critical patent/CN106909458A/zh
Publication of CN106909458A publication Critical patent/CN106909458A/zh
Pending legal-status Critical Current

Links

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种内存管理方法及装置,至少能够解决现有方式中无法连续获取一段时间内的内存变化情况,因而无法根据内存的动态变化规律进行管理的技术问题。该方法包括:对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;向所述目标函数中注入用于管理内存状态的挂钩函数;当所述目标函数运行至所述挂钩函数所在位置时,由所述挂钩函数根据所述目标函数对应进程的进程内存映像来确定内存占用情况,并根据所述内存占用情况进行内存管理。

Description

内存管理方法及装置
技术领域
本发明涉及网络通信技术领域,具体涉及一种内存管理方法及装置。
背景技术
在安卓(Android)系统中,应用程序的内存资源属于紧缺资源。对于应用,尤其是工具类应用来说,内存占用情况更是衡量应用程序是否异常的重要指标之一。当应用程序的内存占用量过大时,将会导致系统卡慢,甚至导致应用程序的内存耗尽(Out of memory,简称OOM)问题。
为此,需要监测系统中各个进程的内存占用情况,并根据内存占用情况对内存资源进行管理。现有技术中,在Android系统中检测进程的内存占用情况时,通常是针对某一进程分析该进程在特定的一个时刻的内存占用情况,并根据该时刻的内存占用情况进行管理。在这种方式中,仅根据一个时刻的内存占用情况来监测进程的内存状态,无法连续获取一段时间内的内存变化情况,因而无法确定内存占用情况的动态变化规律,进而导致内存管理的效果不佳。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的内存管理方法及装置。
依据本发明的一个方面,提供了一种内存管理方法,包括:对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;向所述目标函数中注入用于管理内存状态的挂钩函数;当所述目标函数运行至所述挂钩函数所在位置时,由所述挂钩函数根据所述目标函数对应进程的进程内存映像来确定内存占用情况,并根据所述内存占用情况进行内存管理。
依据本发明的另一方面,提供了一种内存管理装置,包括:分析模块,适于对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;注入模块,适于向所述目标函数中注入用于管理内存状态的挂钩函数;管理模块,适于当所述目标函数运行至所述挂钩函数所在位置时,控制所述挂钩函数根据所述目标函数对应进程的进程内存映像来确定内存占用情况,并根据所述内存占用情况进行内存管理。
在本发明提供的内存管理方法及装置中,能够从应用程序的代码段中获取用于执行内存相关操作的函数,并向这些函数中注入用于管理内存状态的挂钩函数,从而由挂钩函数在程序运行过程中动态监测内存占用情况,主动跟踪内存的动态变化量,使得内存资源得到更加合理的利用。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明一个实施例提供的内存管理方法的流程图;
图2示出了本发明一个具体实施例提供的内存管理方法的流程图;
图3示出了代码为23224的进程在一个时间点的内存占用信息;
图4示出了本发明另一具体实施例提供的内存管理方法的流程图;以及,
图5示出了本发明实施例提供的一种内存管理装置的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种内存管理方法及装置,至少能够解决现有方式中无法连续获取一段时间内的内存变化情况,因而无法根据内存的动态变化规律进行管理的技术问题。
图1示出了本发明一个实施例提供的内存管理方法的流程图。如图1所示,该方法包括:
步骤S110:对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数。
其中,内存相关操作包括:内存的申请、内存的创建、以及内存的销毁。
步骤S120:向目标函数中注入用于管理内存状态的挂钩函数。
具体地,该挂钩函数通过Hook机制注入到目标函数中,其能够监测目标函数的运行状态,并实现对内存状态的动态监测及管理。
步骤S130:当目标函数运行至挂钩函数所在位置时,由挂钩函数根据目标函数对应进程的进程内存映像来确定内存占用情况,并根据内存占用情况进行内存管理。
其中,目标函数对应进程的进程内存映像通过安卓系统提供的虚拟文件获取,或者,通过预先创建的系统内存检查文件获取。
具体地,在管理时,可以通过以下方式实现:确定各个进程中包含的匿名对象,其中,匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;判断匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,确定该匿名对象所占用的内存块符合回收条件。
在本发明提供的内存管理方法中,能够从应用程序的代码段中获取用于执行内存相关操作的函数,并向这些函数中注入用于管理内存状态的挂钩函数,从而由挂钩函数在程序运行过程中动态监测内存占用情况,主动跟踪内存在连续时间段内的动态变化量,使得内存资源得到更加合理的利用。
图2示出了本发明一个具体实施例提供的内存管理方法的流程图,如图2所示,该方法包括如下步骤:
步骤S210:获取并解析内存信息文件。
在本步骤的一种实现方式中,内存信息文件为安卓系统提供的虚拟文件。在安卓系统中,设置有proc虚拟文件系统,该文件系统下面的文件并不是真实存在的,因而不占用实际存储空间。该虚拟系统中的文件用于显示系统的内存使用信息。例如,通过proc/meminfo存储路径获取到的内存信息文件用于显示物理及虚拟内存使用情况,通过proc/kcore存储路径获取到的内存信息文件用于显示内存镜像信息等。另外,还可以通过proc/meminfo/maps存储路径、proc/meminfo/smaps存储路径或者proc/meminfo/mem存储路径来获取内存信息文件。其中,maps文件可查看某一进程的代码段、栈区、堆区、动态库以及内核区对应的虚拟地址,但是只能简单地显示各个分区的内存占用情况;smaps文件可显示每个分区中更为详细的内存占用数据。
在本步骤的另一种实现方式中,内存信息文件为预先创建的系统内存检查文件。例如,该系统内存检查文件可以为hprof文件。在生成hprof文件时,既可以通过“dump hprof file”按钮生成,也可以通过在程序中加入以下代码生成:
void generateHprof()
{
String packageName=getApplicationInfo().packageName;
String hpFilePath="/data/data/"+packageName+"/input.hprof";
try{
//Debug.dumpHprofData("/sdcard/input.hprof");
Debug.dumpHprofData(hpFilePath);
}catch(IOException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
}
上述两种形式的内存信息文件都可以使用,本发明对内存信息文件的具体类型不做限定。另外,本步骤中获取到的内存信息文件可以是多个,且可以同时包含上述两种形式的内存信息文件。
步骤S220:根据内存信息文件的解析结果获得系统中的各个进程在多个时间点所对应的进程内存映像。
通过对内存信息文件进行解析,能够获得系统中的各个进程在多个时间点所对应的进程内存映像。例如,针对特定某一进程而言,能够获取到该进程在时间点T1至时间点T2的时间段内的多个连续时间点的内存占用信息。具体地,图3示出了代码为23224的进程在一个时间点的内存占用信息。
在本发明的一个具体例子中,通过对hprof文件进行解析能够得到在该hprof文件中产生的对象总数(其代表了在dump hprof文件时该进程中的java层对象总数)以及在dump hprof文件时该进程中的GC Roots数量、Class数量和ClassLoader数量。
步骤S230:根据进程内存映像确定各个进程中的各个对象所占用的内存块的动态变化情况。
由于进程内存映像包括各个时间点的内存占用情况,因此,能够根据连续时间段内的进程内存映像确定各个进程中的各个对象所占用的内存块的动态变化情况。根据该动态变化情况能够分析出动态变化的规律,例如,动态增长或动态减少或维持不变等。
步骤S240:根据动态变化情况判断各个对象所占用的内存块是否符合预设的回收条件,并在判断结果为是时,对符合回收条件的内存块进行回收。
其中,预设的回收条件用于对系统中的内存块进行回收,以便及时释放系统中无用的内存,将其合理分配给其他进程。
具体地,在本步骤中,确定各个进程中包含的匿名对象,其中,匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;判断匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,确定该匿名对象所占用的内存块符合上述回收条件。
所谓匿名对象是指:在堆上生成了对象,但是在栈上却没有某个变量指向它。栈内存储程序中定义的变量(基本类型和引用类型),堆内存放引用类型引用的对象。匿名对象只开辟了实例的内存存在于java堆内,并没有该类型的变量引用或指向这个对象(因为它是匿名的),所以栈内存中没有匿名实例的引用。基于上述特征,匿名对象用完一次之后,由于没有任何引用能够指向该匿名对象,所以该匿名对象就会变成系统中的垃圾资源。在本实施例中,当确定一个匿名对象所占用的内存块在预设时间内没有发生变化时,则说明没有任何变量引用该对象,因而将该对象确定为垃圾资源进行回收,从而能够有效释放内存。
另外,在本步骤中,还可以进一步通过以下方式来确定要回收的内存块:根据进程内存映像,将各个进程中的各个对象的内存位置记录在第一位图中;遍历各个进程所包含的全部对象,以获取各个对象之间的引用关系,将被引用的对象的内存位置记录在第二位图中;判断第一位图中的各个对象是否包含在第二位图中,对未包含在第二位图中的对象所占用的内存块进行回收。具体地,第一位图中列出了系统中的各个进程的所有对象,第二位图中列出了系统中被引用的对象,当某一对象出现在第一位图中而没有出现在第二位图中时,说明该对象虽然存在于系统内存中但是却没有任何引用价值,因此属于无用的对象,其占用的内存块属于该被回收的垃圾资源。
更进一步地,在本实施例中还可以进一步根据各个进程中的各个对象所占用的内存块的动态变化情况判断对象的实际占用内存块大小与预留内存块大小之间的比值的增长速度是否超过预设阈值,当判断结果为是时,针对该对象所占用的内存块发出报警信息。通过该方式,能够将内存占用量迅速增加的对象所占用的内存块确定为潜在的待回收资源,原因在于,当一个对象所占用的内存块的增长速度过快时,容易发生OOM问题,从而给系统的稳定运行带来风险。
通过上述实施例,能够根据进程占用内存的动态变化情况来确定要回收的内存资源,其结合进程在一段时间内的内存占用规律来管理内存,从而使得内存管理效率更高。
图4示出了本发明另一具体实施例提供的内存管理方法的流程图。如图4所示,该方法包括:
步骤S410:对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数。
其中,内存相关操作包括:内存的申请、内存的创建、以及内存的销毁等一切与内存相关联的操作。为了从应用程序的代码段中获取上述操作,可以预先根据各种操作所对应的函数名称、字段名称等特征进行查找。在本步骤中,将查找到的用于执行内存相关操作的函数确定为目标函数。为了便于后续步骤的执行,在本步骤中,可以对确定出的目标函数进行标记。
步骤S420:向目标函数中注入用于管理内存状态的挂钩函数。
其中,挂钩函数主要是基于Hook机制实现的,所谓Hook是指Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行Hook后,一旦发生已Hook的事件,对该事件进行Hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。换言之,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数既可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
在本实施例中,通过Hook机制对目标函数进行Hook,根据实际需求,既可以在目标函数的执行入口处进行Hook,从而在目标函数刚刚执行到入口处时即触发挂钩函数中的函数逻辑;也可以在目标函数的中间代码段处进行Hook,从而在目标函数执行到中间的特定操作事件时触发挂钩函数中的函数逻辑。
优选地,在本实施例中所执行的挂钩操作为内联挂钩操作(inline hook)。其中,inline hook不同于以前通过修改函数的调用地址的普通hook,是直接在目标函数的函数体内修改指令,用一个跳转指令实现挂钩的目的,因而实现起来更为灵活。
步骤S430:当目标函数运行至挂钩函数所在位置时,由挂钩函数根据目标函数对应进程的进程内存映像来确定内存占用情况。
具体地,取决于挂钩函数注入的位置,当挂钩函数的注入位置为目标函数的执行入口处时,当目标函数运行至执行入口时,则跳转到挂钩函数处并执行挂钩函数中设定的逻辑;当挂钩函数的注入位置为目标函数的中间代码段处时,当目标函数运行至该代码段处定义的特定操作事件时,则跳转到挂钩函数处并执行挂钩函数中设定的逻辑。
其中,挂钩函数中设定的逻辑通常为:获取目标函数对应进程的进程内存映像,进而确定内存占用情况。具体地,进程内存映像的获取方式以及分析内存占用情况的具体实现细节可参见上一实施例中相应步骤的描述,此处不再赘述。
步骤S440:根据获取到的内存占用情况进行内存管理。
具体管理时,可通过多种方式进行管理。例如,可通过以下方式进行管理:首先确定目标函数对应进程中包含的匿名对象,其中,匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;判断匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,回收该匿名对象所占用的内存块。
或者,也可以通过以下方式进行管理:当确定目标函数对应进程中的对象的实际占用内存块大小与预留内存块大小之间的比值超过预设阈值时,针对该对象所占用的内存块发出报警信息。
另外,在本步骤中,本领域技术人员还可以结合上一实施例中的相应描述进行管理,本发明对具体细节不做限定。
由此可见,在本实施例中,通过对应用进程的关键位置进行Hook,能够主动跟踪相应内存块的动态变化情况,进而记录内存的申请、创建、数据以及销毁等操作。通过上述方式,不仅能够合理管理内存,还能够及时进行预警,有效防止应用程序的OOM问题。
本领域技术人员还可以对上述两个实施例中的各个步骤进行各种组合或变形,本发明对此不作限定。
图5示出了本发明实施例提供的一种内存管理装置的结构图,该装置包括:
分析模块51,适于对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;
注入模块52,适于向目标函数中注入用于管理内存状态的挂钩函数;
管理模块53,适于当目标函数运行至挂钩函数所在位置时,控制挂钩函数根据目标函数对应进程的进程内存映像来确定内存占用情况,并根据内存占用情况进行内存管理。
可选地,目标函数对应进程的进程内存映像通过安卓系统提供的虚拟文件获取,或者,通过预先创建的系统内存检查文件获取。
其中,管理模块53具体用于:
确定目标函数对应进程中包含的匿名对象,其中,匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;
判断匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,回收该匿名对象所占用的内存块。
可选地,该装置进一步包括:报警模块,适于在确定目标函数对应进程中的对象的实际占用内存块大小与预留内存块大小之间的比值超过预设阈值时,针对该对象所占用的内存块发出报警信息。
其中,内存相关操作包括:内存的申请、内存的创建、以及内存的销毁。
上述各个模块的具体工作原理可参见方法实施例中相应步骤的描述,此处不再赘述。
在本发明提供的内存管理的方法及装置中,通过解析内存信息文件来获得系统中的各个进程在多个时间点所对应的进程内存映像,从而根据进程内存映像确定各个进程中的各个对象所占用的内存块的动态变化情况,根据动态变化情况判断各个对象所占用的内存块是否符合预设的回收条件。由于本发明中能够获取各个进程在连续的一段时间内的多个时间点(而非一个时间点)所对应的进程内存映像,从而能够确定内存占用情况的动态变化规律,进而根据该动态变化规律进行内存管理,使得内存资源得到更加合理的利用。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种内存管理方法,包括:
对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;
向所述目标函数中注入用于管理内存状态的挂钩函数;
当所述目标函数运行至所述挂钩函数所在位置时,由所述挂钩函数根据所述目标函数对应进程的进程内存映像来确定内存占用情况,并根据所述内存占用情况进行内存管理。
2.根据权利要求1所述的方法,其中,所述目标函数对应进程的进程内存映像通过安卓系统提供的虚拟文件获取,或者,通过预先创建的系统内存检查文件获取。
3.根据权利要求1或2所述的方法,其中,所述根据所述内存占用情况进行内存管理的步骤具体包括:
确定所述目标函数对应进程中包含的匿名对象,其中,所述匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;
判断所述匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,回收该匿名对象所占用的内存块。
4.根据权利要求1或2所述的方法,其中,所述根据所述内存占用情况进行内存管理的步骤具体包括:
当确定所述目标函数对应进程中的对象的实际占用内存块大小与预留内存块大小之间的比值超过预设阈值时,针对该对象所占用的内存块发出报警信息。
5.根据权利要求1所述的方法,其中,所述内存相关操作包括:内存的申请、内存的创建、以及内存的销毁。
6.一种内存管理装置,包括:
分析模块,适于对应用程序的代码段进行分析,将其中用于执行内存相关操作的函数确定为目标函数;
注入模块,适于向所述目标函数中注入用于管理内存状态的挂钩函数;
管理模块,适于当所述目标函数运行至所述挂钩函数所在位置时,控制所述挂钩函数根据所述目标函数对应进程的进程内存映像来确定内存占用情况,并根据所述内存占用情况进行内存管理。
7.根据权利要求6所述的装置,其中,所述目标函数对应进程的进程内存映像通过安卓系统提供的虚拟文件获取,或者,通过预先创建的系统内存检查文件获取。
8.根据权利要求6或7所述的装置,其中,所述管理模块具体用于:
确定所述目标函数对应进程中包含的匿名对象,其中,所述匿名对象包括对象数据存储于堆内存中且对象名称未存储于栈内存中的对象;
判断所述匿名对象所占用的内存块在预设时间内是否发生变化,当判断结果为否时,回收该匿名对象所占用的内存块。
9.根据权利要求6或7所述的装置,其中,进一步包括:
报警模块,适于在确定所述目标函数对应进程中的对象的实际占用内存块大小与预留内存块大小之间的比值超过预设阈值时,针对该对象所占用的内存块发出报警信息。
10.根据权利要求6所述的装置,其中,所述内存相关操作包括:内存的申请、内存的创建、以及内存的销毁。
CN201510981811.9A 2015-12-23 2015-12-23 内存管理方法及装置 Pending CN106909458A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510981811.9A CN106909458A (zh) 2015-12-23 2015-12-23 内存管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510981811.9A CN106909458A (zh) 2015-12-23 2015-12-23 内存管理方法及装置

Publications (1)

Publication Number Publication Date
CN106909458A true CN106909458A (zh) 2017-06-30

Family

ID=59206108

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510981811.9A Pending CN106909458A (zh) 2015-12-23 2015-12-23 内存管理方法及装置

Country Status (1)

Country Link
CN (1) CN106909458A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108536434A (zh) * 2018-01-09 2018-09-14 武汉斗鱼网络科技有限公司 一种基于高级程序设计语言实现钩子函数的方法及装置
CN110069336A (zh) * 2018-01-22 2019-07-30 合肥杰发科技有限公司 内存资源分配方法、分配装置、芯片和存储装置
CN110347407A (zh) * 2019-07-16 2019-10-18 武汉斗鱼鱼乐网络科技有限公司 一种获取内存占用量的方法、装置、计算机设备及介质
CN110362451A (zh) * 2019-07-17 2019-10-22 北京小米移动软件有限公司 一种监控方法、装置及介质
CN112231066A (zh) * 2020-10-29 2021-01-15 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及系统
CN112306694A (zh) * 2020-11-19 2021-02-02 网易(杭州)网络有限公司 内存分析方法和装置、计算机可读存储介质、电子设备
CN112579295A (zh) * 2020-12-25 2021-03-30 百果园技术(新加坡)有限公司 图像内存分析方法、装置、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1632761A (zh) * 2003-12-24 2005-06-29 华为技术有限公司 一种遍历和访问被测应用程序中对象的方法
CN101110044A (zh) * 2007-08-28 2008-01-23 中兴通讯股份有限公司 一种内存监控管理的方法及系统
CN101458754A (zh) * 2009-01-09 2009-06-17 清华大学 一种监控应用程序行为的方法及装置
CN102968335A (zh) * 2012-10-25 2013-03-13 东莞宇龙通信科技有限公司 终端和终端内存管理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1632761A (zh) * 2003-12-24 2005-06-29 华为技术有限公司 一种遍历和访问被测应用程序中对象的方法
CN101110044A (zh) * 2007-08-28 2008-01-23 中兴通讯股份有限公司 一种内存监控管理的方法及系统
CN101458754A (zh) * 2009-01-09 2009-06-17 清华大学 一种监控应用程序行为的方法及装置
CN102968335A (zh) * 2012-10-25 2013-03-13 东莞宇龙通信科技有限公司 终端和终端内存管理方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108536434A (zh) * 2018-01-09 2018-09-14 武汉斗鱼网络科技有限公司 一种基于高级程序设计语言实现钩子函数的方法及装置
CN108536434B (zh) * 2018-01-09 2020-03-17 武汉斗鱼网络科技有限公司 一种基于高级程序设计语言实现钩子函数的方法及装置
CN110069336A (zh) * 2018-01-22 2019-07-30 合肥杰发科技有限公司 内存资源分配方法、分配装置、芯片和存储装置
CN110347407A (zh) * 2019-07-16 2019-10-18 武汉斗鱼鱼乐网络科技有限公司 一种获取内存占用量的方法、装置、计算机设备及介质
CN110362451A (zh) * 2019-07-17 2019-10-22 北京小米移动软件有限公司 一种监控方法、装置及介质
CN110362451B (zh) * 2019-07-17 2023-09-26 北京小米移动软件有限公司 一种监控方法、装置及介质
CN112231066A (zh) * 2020-10-29 2021-01-15 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及系统
CN112231066B (zh) * 2020-10-29 2024-02-13 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及系统
CN112306694A (zh) * 2020-11-19 2021-02-02 网易(杭州)网络有限公司 内存分析方法和装置、计算机可读存储介质、电子设备
CN112306694B (zh) * 2020-11-19 2024-05-10 网易(杭州)网络有限公司 内存分析方法和装置、计算机可读存储介质、电子设备
CN112579295A (zh) * 2020-12-25 2021-03-30 百果园技术(新加坡)有限公司 图像内存分析方法、装置、电子设备和存储介质
CN112579295B (zh) * 2020-12-25 2024-05-24 百果园技术(新加坡)有限公司 图像内存分析方法、装置、电子设备和存储介质

Similar Documents

Publication Publication Date Title
CN106909458A (zh) 内存管理方法及装置
CN106909457A (zh) 内存管理方法及装置
US10901709B2 (en) Partitioning based migration of systems to container and microservice based platforms
CN103346912B (zh) 告警相关性分析的方法、装置及系统
CN105550594A (zh) 安卓应用文件的安全性检测方法
CN102193810A (zh) 模块间内联候选标识
CN107257959A (zh) 托管代码中的垃圾收集控制
CN104798075A (zh) 应用随机化
CN111951010A (zh) 一种基于规则引擎的业务决策方法、装置、电子设备和可读存储介质
CN111338622B (zh) 供应链代码识别方法、装置、服务器及可读存储介质
Natschläger et al. Deontic BPMN: a powerful extension of BPMN with a trusted model transformation
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
Ahammad et al. A new topological sorting algorithm with reduced time complexity
CN105260378A (zh) 数据库审计的方法和设备
CN104603791A (zh) 签名验证装置及签名验证方法和程序
CN106529281A (zh) 一种可执行文件处理方法及装置
CN103677746B (zh) 指令重组方法及装置
Hussein et al. Context-aware adaptive software systems: A system-context relationships oriented survey
Gil et al. A nano-pattern language for Java
CN112039709B (zh) 资源调度方法、装置、设备和计算机可读存储介质
KR100954355B1 (ko) 악성코드 진단 및 치료 장치
De Smedt et al. Behavioral constraint template-based sequence classification
CN115878336A (zh) 锁操作中的信息处理方法、装置及计算设备
Luh et al. Sequitur-based Inference and Analysis Framework for Malicious System Behavior.
Eiter et al. Reasoning about evolving nonmonotonic knowledge bases

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20170630

RJ01 Rejection of invention patent application after publication