内存空间回收方法、装置、电子设备及存储介质与流程

文档序号:15931410发布日期:2018-11-14 01:41阅读:142来源:国知局

本发明涉及计算机技术领域,更具体的说,是涉及内存空间回收方法、装置、电子设备及存储介质。

背景技术

计算机指令就是指挥机器工作的指示和命令,程序代码包含一系列按一定顺序排列的指令,执行程序代码的过程就是计算机的工作过程。程序代码涉及多个变量,程序代码在执行过程中,变量会一直占用内存空间。

若程序代码(例如,利用java语言编写的程序代码)执行的时间较长,则程序代码包含的变量会一直占用内存空间,导致内存空间不足。



技术实现要素:

有鉴于此,本发明提供了一种内存空间回收方法、装置、电子设备及存储介质。

为实现上述目的,本发明提供如下技术方案:

一种内存空间回收方法,包括:

获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;

在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;

执行更新后的指令组。

其中,所述指令组包括至少一个指令集,一个指令集包括一个或多个指令,所述获取待执行的指令组包含的第一变量对应的第一位置包括:

获取所述指令组对应的生命周期参数,其中,所述生命周期参数包括所述至少一个指令集分别对应的起始指令位置和终止指令位置;

获取所述第一变量对应的第二位置,所述第二位置表征在所述指令组中最后出现的位置;

基于所述生命周期参数以及所述第一变量对应的第二位置,获得所述第一变量对应的第一位置。

其中,所述基于所述生命周期参数以及所述第一变量对应的第二位置,获得所述第一变量对应的第一位置包括:

基于所述生命周期参数,确定所述第一变量对应的第二位置所属的第一指令集;

基于所述第一指令集的指令类型,确定所述第一变量对应的第一位置。

其中,所述基于所述第一指令集的指令类型,确定所述第一变量对应的第一位置包括:

若所述第一指令集的指令类型为第一类型,将所述第二位置确定为所述第一位置,所述第一类型表征所述第一变量在该第一指令集中被调用的次数为1;

若所述第一指令集的指令类型为第二类型,将所述第一指令集对应的终止指令位置确定为所述第一位置,所述第二类型表征所述第一变量在该第一指令集中被调用的次数大于1。

其中,还包括:

基于待执行的源程序指令,得到所述指令组。

其中,所述在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组包括:

在第一指令集与第二指令集之间,插入清空所述第一变量占用的内存空间的清空指令;

其中,所述第一指令集为所述第一变量对应的第二位置所属的指令集,所述第二指令集为所述第一指令集的下一指令集,所述第二位置表征所述第一变量在所述指令组中最后出现的位置。

一种内存空间回收装置,包括:

获取模块,用于获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;

插入模块,用于在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;

执行模块,用于执行更新后的指令组。

其中,所述指令组包括至少一个指令集,一个指令集包括一个或多个指令,所述获取模块包括:

第一获取单元,用于获取所述指令组对应的生命周期参数,其中,所述生命周期参数包括所述至少一个指令集分别对应的起始指令位置和终止指令位置;

第二获取单元,用于获取所述第一变量对应的第二位置,所述第二位置表征在所述指令组中最后出现的位置;

第三获取单元,用于基于所述生命周期参数以及所述第一变量对应的第二位置,获得所述第一变量对应的第一位置。

一种电子设备,包括:

存储器,用于存储程序;

处理器,用于执行所述程序,所述程序具体用于:

获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;

在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;

执行更新后的指令组。

一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如上述任一所述的内存空间回收方法包含的各个步骤。

经由上述的技术方案可知,与现有技术相比,本发明公开了一种内存空间回收方法,获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;执行更新后的指令组。第一变量为待执行的指令组中任一变量,可选的,更新后的指令组中在每个变量的最后使用位置均插入有相应的清空指令。使得指令组使用完毕第一变量后,就会清空第一变量占用的内存空间,即不会影响指令组的执行,也会及时清空内存空间中的第一变量,从而不会出现内存空间不足的情况。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的内存空间回收方法的一种实现方式的流程图;

图2为本发明实施例提供的获取待执行的指令组包含的第一变量对应的第一位置的一种实现方式的流程图;

图3为本发明实施例提供的内存空间回收装置的实现方式的结构图;

图4为本发明实施例提供的电子设备的一种实现方式的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前程序代码在执行过程中,程序代码中的变量会一直占用内存空间。例如,利用java语言编写的大数据项目的程序代码包含多个多变量,在运行该程序代码时,程序代码中包含的很多变量,会占用大量内存空间。

下面举一helloworld例子进行说明,假设程序代码如下所示:

上述程序代码在执行过程中,变量s在程序代码执行到位置2时,程序代码的后续程序在执行过程中不会使用到变量s,但是变量s仍然占用内存空间。

综上,程序代码中部分变量在程序代码执行到一定阶段时,程序代码的后续程序在执行过程中不会使用到这些变量,但是这些变量仍然占用内存空间,这在某些对内存空间要求很严格场景,例如,java作为后台常驻服务的场景,将导致内存空间不足。

为了解决上述问题,本发明实施例提供了一种内存空间回收方法,如图1所示,为本发明实施例提供的内存空间回收方法的一种实现方式的流程图,该方法包括:

步骤s101:获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置。

第一变量为待执行的指令组中任一变量。

本发明实施例中的指令组可以包括一条或多条指令。

在一可选实施例中,指令组可以包括字节码;字节码(byte-code)是一种包含执行程序,由一序列op代码/数据对组成的二进制文件,是一种中间码。若指令组包括字节码,则可以基于待执行的源程序指令得到该指令组。

例如,若程序代码为java源程序指令(.java文件),则java源程序指令在经过java编译器编译之后会被转换成java字节码文件(.class文件)。字节码文件包含的内容为字节码。

字节码文件比较特殊,其内部不包含任何分隔符区分段落。一组8位字节单位的字节流组成了一个完整的字节码文件。

仍以上述helloworld程序代码为例,其对应的字节码如下:

0:ldc#2//stringhello

2:astore_1//astore指令,用于告知变量被赋值,以便跟踪变量

3:aconst_null

4:astore_2

5:aload_2//aload指令,用于记录变量位置

6:ifnull21

9:getstatic#3//fieldjava/lang/system.out:ljava/io/printstream;

12:aload_1

13:invokevirtual#4//methodjava/io/printstream.println:(ljava/lang/string;)v

16:iconst_1

17:invokestatic#5//methodjava/lang/integer.valueof:(i)ljava/lang/integer;

20:astore_2

21:getstatic#3//fieldjava/lang/system.out:ljava/io/printstream;

24:ldc#6//stringworld

26:invokevirtual#4//methodjava/io/printstream.println:(ljava/lang/string;)v

29:return

在一可选实施例中,指令组可以包括程序代码。

仍以上述helloworld程序代码为例,若指令组包括程序代码,则变量s的最后使用位置为位置2;若指令组包括字节码,则变量s的最后使用位置为16:iconst_1所在位置#16。

步骤s102:在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组。

对待执行的指令组中任一变量执行步骤s101至步骤s102从而得到更新后的指令组。

步骤s103:执行更新后的指令组。

本发明实施例提供的内存空间回收方法,获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;执行更新后的指令组。第一变量为待执行的指令组中任一变量,可选的,更新后的指令组中在每个变量的最后使用位置均插入有相应的清空指令。使得指令组使用完毕第一变量后,就会清空第一变量占用的内存空间,即不会影响指令组的执行,也会及时清空内存空间中的第一变量,从而不会出现内存空间不足的情况。

如图2所示,为本发明实施例提供的获取待执行的指令组包含的第一变量对应的第一位置的一种实现方式的流程图,该方法包括:

步骤s201:获取所述指令组对应的生命周期参数,其中,所述生命周期参数包括所述至少一个指令集分别对应的起始指令位置和终止指令位置。

所述指令组包括至少一个指令集,一个指令集包括一个或多个指令。

在一可选实施例中,所述至少一个指令集可以包括:至少一个循环指令集,和/或,至少一个选择指令集,和/或,至少一个赋值指令集等。其中,循环指令集、选择指令集、赋值指令集仅为示例,因为并不能穷举所有指令集。

循环指令集可以为where指令集或while指令集或for指令集等等,选择指令集可以为if指令集等等。

以上述helloworld程序代码为例,上述helloworld程序代码包括if指令集。若指令组包括程序代码,则if指令集包括:(i!=null){system.out.println(s);i=1;},若指令组包括字节码,则if指令集包括:从6:ifnull21至21:getstatic#3//fieldjava/lang/system.out:ljava/io/printstream,即if指令集包括从字节码的位置#6至位置#21的指令。该if指令集的起始指令位置为#6,终止指令位置为#21。若指令组包括程序代码,则该程序代码中包括两个赋值指令集,分别为strings="hello"赋值指令集,和integeri=null赋值指令集。

综上,一个指令集包括指令组中连续的至少一个指令,且连续的所述至少一个指令整体表征一种类型的指令语句。

在一可选实施例中,可以获得待执行的指令组的对象生命周期图,例如,java对象生命周期图,基于对象生命周期图可以获取指令组对应的生命周期参数。

步骤s202:获取所述第一变量对应的第二位置,所述第二位置表征在所述指令组中最后出现的位置。

从上述helloworld程序代码可以看出变量s的最后使用位置不是变量s最后出现的位置1,因为位置1位于if语句内,可能涉及循环,出现反复使用变量s的情况,因此,if语句结束后,即位置2处才是变量s的最后使用位置。

在一可选实施例中,可以遍历指令组,从而得到第一变量在指令组中最后出现的位置。如上述helloworld程序代码对应的字节码中astore指令,用于告知变量被赋值,以便跟踪变量;aload指令,用于记录变量位置;基于astore指令以及aload指令就可以得到各变量在指令组中最后出现的位置。

步骤s203:基于所述生命周期参数以及所述第一变量对应的第二位置,获得所述第一变量对应的第一位置。

在一可选实施例中,步骤s203可以包括:

基于所述生命周期参数,确定所述第一变量对应的第二位置所属的第一指令集;基于所述第一指令集的指令类型,确定所述第一变量对应的第一位置。

在一可选实施例中,若所述第一指令集的指令类型为第一类型,将所述第二位置确定为所述第一位置,所述第一类型表征所述第一变量在该第一指令集中被调用的次数为1。

在一可选实施例中,第一类型可以包括:赋值指令集。

在一可选实施例中,若所述第一指令集的指令类型为第二类型,将所述第一指令集对应的终止指令位置确定为所述第一位置,所述第二类型表征所述第一变量在该第一指令集中被调用的次数大于1。

在一可选实施例中,第二类型可以包括循环指令集或选择指令集。

在一可选实施例中,在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组包括:

在第一指令集与第二指令集之间,插入清空所述第一变量占用的内存空间的清空指令。

其中,所述第一指令集为所述第一变量对应的第二位置所属的指令集,所述第二指令集为所述第一指令集的下一指令集,所述第二位置表征所述第一变量在所述指令组中最后出现的位置。

仍以上述helloworld程序代码为例,第一指令集是指if指令集,第二指令集是system.out.println("world")指令集。

上述本发明公开的实施例中详细描述了方法,对于本发明的方法可采用多种形式的装置实现,因此本发明还公开了一种装置,下面给出具体的实施例进行详细说明。

如图3所示,为本发明实施例提供的内存空间回收装置的实现方式的结构图,该内存空间回收装置包括:

获取模块31,用于获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;

插入模块32,用于在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;

执行模块33,用于执行更新后的指令组。

可选的,所述指令组包括至少一个指令集,一个指令集包括一个或多个指令,所述获取模块包括:

第一获取单元,用于获取所述指令组对应的生命周期参数,其中,所述生命周期参数包括所述至少一个指令集分别对应的起始指令位置和终止指令位置;

第二获取单元,用于获取所述第一变量对应的第二位置,所述第二位置表征在所述指令组中最后出现的位置;

第三获取单元,用于基于所述生命周期参数以及所述第一变量对应的第二位置,获得所述第一变量对应的第一位置。

可选的,第三获取单元包括:

第一确定子单元,用于基于所述生命周期参数,确定所述第一变量对应的第二位置所属的第一指令集;

第二确定子单元,用于基于所述第一指令集的指令类型,确定所述第一变量对应的第一位置。

可选的,第二确定子单元包括:

第一确定子模块,用于若所述第一指令集的指令类型为第一类型,将所述第二位置确定为所述第一位置,所述第一类型表征所述第一变量在该第一指令集中被调用的次数为1;

第二确定子模块,用于若所述第一指令集的指令类型为第二类型,将所述第一指令集对应的终止指令位置确定为所述第一位置,所述第二类型表征所述第一变量在该第一指令集中被调用的次数大于1。

可选的,还包括:

第二获取模块,用于基于待执行的源程序指令,得到所述指令组。

可选的,插入模块包括:

插入单元,用于在第一指令集与第二指令集之间,插入清空所述第一变量占用的内存空间的清空指令;

其中,所述第一指令集为所述第一变量对应的第二位置所属的指令集,所述第二指令集为所述第一指令集的下一指令集,所述第二位置表征所述第一变量在所述指令组中最后出现的位置。

如图4所示,为本发明实施例提供的电子设备的一种实现方式的结构图,该电子设备包括:

存储器41,用于存储程序;

处理器42,用于执行所述程序,所述程序具体用于:

获取待执行的指令组包含的第一变量对应的第一位置,其中,所述第一位置表征在执行所述指令组时最后使用所述第一变量的位置;

在所述第一位置后插入清空所述第一变量占用的内存空间的清空指令,得到更新后的指令组;

执行更新后的指令组。

存储器41可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

处理器42可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

可选的,电子设备还可以包括通信总线43以及通信接口44,其中,存储器41、处理器42、通信接口44、通过通信总线43完成相互间的通信;

可选的,通信接口44可以为通信模块的接口,如gsm模块的接口。

本发明实施例还提供了一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如上述任一所述的内存空间回收方法包含的各个步骤。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置或系统类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1