一种垃圾回收方法及装置
技术领域
本发明涉及互联网技术领域,特别涉及一种垃圾回收方法及装置。
背景技术
C#、Java和JavaScript都有垃圾回收机制(Garbage Collection,GC),也就是说执行环境会负责管理代码执行过程中使用的内存,在开发过程中就无需考虑内存分配及无用内存的回收问题。JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
但是,在界面注销后,原来界面所引用的变量和布局无法得到回收,导致这部分所占用的空间无法及时释放。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种垃圾回收方法及装置。
本发明提供一种垃圾回收方法,包括:
获得操作指令,所述操作指令用于指示注销界面;
响应于接收到所述操作指令,将所述注销的界面下的变量置为空,将所述注销的界面引用的布局更换为空布局。
本发明实施例的上述方法,在注销界面后,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。从而在垃圾回收机制启动时,可以回收界面所引用的变量和布局,从而有效释放空间。
在一个实施例中,在所述获得操作指令之前,所述方法还可包括:
接收用户输入的关闭界面的指令;
响应于接收到所述关闭界面的指令,生成所述操作指令。
在一个实施例中,在所述将注销的界面下的常量置为空、将所述注销的界面引用的布局更换为空布局之后,所述方法还可包括:
获得垃圾回收信息,所述垃圾回收信息中包含所述注销的界面的界面标识;
执行垃圾回收操作,根据所述界面标识将所述注销的界面的变量和空布局回收。
本实施例中,垃圾回收信息中包含注销的界面的界面标识,从而在执行垃圾回收操作时,可以快捷、准确的确定出要回收的界面,以及该界面所引用的变量和空布局。
在一个实施例中,所述将注销的界面下的变量置为空,可包括:
将所述变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空。
当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,原则上讲不能够释放进入环境的变量所占的内存,因为它们随时可能会被调用。因此,在本步骤中,不回收环境中的变量、被环境中的变量所引用的变量,而是将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空,以便于垃圾回收器回收这些变量及其所占用内存空间。
在一个实施例中,所述方法还可包括:
对所述变量中除环境中的变量、被环境中的变量所引用的变量之外的变量进行标记操作;
对所述标记的变量执行垃圾回收操作。
本实施例中,对变量中除环境中的变量、被环境中的变量所引用的变量之外的变量进行标记操作,对标记的变量执行垃圾回收操作。由于环境中的变量已经无法访问到这些标记的变量,因此,对这些变量执行垃圾回收操作,可以及时回收空间。
在一个实施例中,所述变量为局部变量。
由于回收的是不再使用的变量,也就是生命周期结束的变量,由于全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后在函数中使用这些变量,直至函数结束。一旦函数结束,局部变量就没有存在必要了,可以释放它们占用的内存。
本发明还提供一种垃圾回收装置,包括:
第一获取模块,用于获得操作指令,所述操作指令用于指示注销界面;
重置模块,用于响应于接收到所述操作指令,将所述注销的界面下的变量置为空,将所述注销的界面引用的布局更换为空布局。
本发明实施例的上述装置,在注销界面后,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。从而在垃圾回收机制启动时,可以回收界面所引用的变量和布局,从而有效释放空间。
在一个实施例中,所述装置还可包括:
接收模块,用于接收用户输入的关闭界面的指令;
生成模块,用于响应于接收到所述关闭界面的指令,生成所述操作指令。
在一个实施例中,所述装置还可包括:
第二获取模块,用于获得垃圾回收信息,所述垃圾回收信息中包含所述注销的界面的界面标识;
回收模块,用于执行垃圾回收操作,根据所述界面标识将所述注销的界面的变量和空布局回收。
本实施例中,垃圾回收信息中包含注销的界面的界面标识,从而在执行垃圾回收操作时,可以快捷、准确的确定出要回收的界面,以及该界面所引用的变量和空布局。
在一个实施例中,所述重置模块,可包括:
重置子模块,用于将所述变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空。
当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,原则上讲不能够释放进入环境的变量所占的内存,因为它们随时可能会被调用。因此,不回收环境中的变量、被环境中的变量所引用的变量,而是将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空,以便于垃圾回收器回收这些变量及其所占用内存空间。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例中一种垃圾回收方法的流程图;
图2为本发明实施例中另一种垃圾回收方法的流程图;
图3为本发明实施例中另一种垃圾回收方法的流程图;
图4为本发明实施例中另一种垃圾回收方法的流程图;
图5为本发明实施例一中一种垃圾回收方法的流程图;
图6为本发明实施例中一种垃圾回收装置的框图;
图7为本发明实施例中另一种垃圾回收装置的框图;
图8为本发明实施例中另一种垃圾回收装置的框图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1所示为本发明实施例中一种垃圾回收方法的流程图,如图1所示,包括以下步骤S11-S12:
步骤S11,获得操作指令,操作指令用于指示注销界面。
操作指令例如可以是用户点击注销按钮的操作指令。比如,用户点击该界面上的注销按钮,终端接收到该操作后,生成对应的操作指令,该操作指令用于将当前界面注销。
步骤S12,响应于接收到操作指令,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。
当接收到注销界面的操作指令之后,界面被注销,这时将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局,也就是取消界面所引用的变量和布局。除此之外,将注销的界面下的常量也置为空。因此,在垃圾回收机制启动时,不但可以回收界面,还可以回收界面所引用的变量和布局以及常量。
本发明实施例的上述方法,在注销界面后,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。从而在垃圾回收机制启动时,可以回收界面所引用的变量和布局,从而有效释放空间。
在一个实施例中,在步骤S11之前,如图2所示,上述方法还可包括以下步骤S13-S14:
步骤S13,接收用户输入的关闭界面的指令。
用户输入的关闭界面的指令可以是用户用鼠标或手指点击关闭按钮或者其它关闭界面的手势或动作。
步骤S14,响应于接收到关闭界面的指令,生成操作指令。
在接收到关闭界面的指令之后,生成操作指令,操作指令指示将该界面注销。
在一个实施例中,在步骤S12之后,如图3所示,上述方法还可包括以下步骤S15-S16:
步骤S15,获得垃圾回收信息,垃圾回收信息中包含注销的界面的界面标识。
步骤S16,执行垃圾回收操作,根据界面标识将注销的界面所引用的变量和空布局回收。
垃圾回收机制的回收时间是不固定的,并不是注销界面后立即启动垃圾回收。因此,步骤S16中的执行垃圾回收操作的时间也是不固定的。
本实施例中,垃圾回收信息中包含注销的界面的界面标识,从而在执行垃圾回收操作时,可以快捷、准确的确定出要回收的界面,以及该界面所引用的变量和空布局。
在一个实施例中,步骤S12中的将注销的界面下的变量置为空,可实施为如下步骤A:
步骤A,将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空。
当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,原则上讲不能够释放进入环境的变量所占的内存,因为它们随时可能会被调用。因此,在本步骤中,不回收环境中的变量、被环境中的变量所引用的变量,而是将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空,以便于垃圾回收器回收这些变量及其所占用内存空间。
在一个实施例中,如图4所示,上述方法还可包括以下步骤S17-S18:
步骤S17,对变量中除环境中的变量、被环境中的变量所引用的变量之外的变量进行标记操作。
垃圾回收时必须先知道哪些变量有用,哪些变量没用,对于不再有用的变量打上标记,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”,以备在垃圾回收器启动时回收该变量及其所占内存空间。用于标记变量不再有用的策略有很多,比如特殊位的反转、维护一个列表等。
垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量所引用的变量,完成之后仍存在标记的变量就是要删除的变量了,因为环境中的变量已经无法访问到这些变量了,垃圾回收器会回收带有标记的变量及其所占空间。
步骤S18,对标记的变量执行垃圾回收操作。
本实施例中,对变量中除环境中的变量、被环境中的变量所引用的变量之外的变量进行标记操作,对标记的变量执行垃圾回收操作。由于环境中的变量已经无法访问到这些标记的变量,因此,对这些变量执行垃圾回收操作,可以及时回收空间。
在一个实施例中,上述变量为局部变量。
由于回收的是不再使用的变量,也就是生命周期结束的变量,由于全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后在函数中使用这些变量,直至函数结束。一旦函数结束,局部变量就没有存在必要了,可以释放它们占用的内存。
下面以具体实施例来说明本公开实施例提供的上述技术方案。
实施例一
实施例一利用本公开实施例提供的垃圾回收方法,如图5所示,终端接下来进行如下操作:
步骤S51,终端接收用户输入的关闭界面的指令。
步骤S52,终端响应于接收到关闭界面的指令,将该界面注销。
步骤S53,终端将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。
步骤S54,终端获得垃圾回收信息,垃圾回收信息中包含注销的界面的界面标识。
步骤S55,终端执行垃圾回收操作,根据界面标识将注销的界面所引用的变量和空布局回收。
实施例一,在注销界面后,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。从而在垃圾回收机制启动时,可以回收界面所引用的变量和布局,从而有效释放空间。
基于同一发明构思,本发明实施例还提供了一种垃圾回收装置,由于该装置所解决问题的原理与前述垃圾回收方法相似,因此该装置的实施可以参见前述方法的实施,重复之处不再赘述。
图6所示为本发明实施例中一种垃圾回收装置的框图,如图6所示,该装置包括:
第一获取模块61,用于获得操作指令,操作指令用于指示注销界面;
重置模块62,用于响应于接收到操作指令,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。
本发明实施例的上述装置,在注销界面后,将注销的界面下的变量置为空,将注销的界面引用的布局更换为空布局。从而在垃圾回收机制启动时,可以回收界面所引用的变量和布局,从而有效释放空间。
在一个实施例中,如图7所示,上述装置还可包括:
接收模块63,用于接收用户输入的关闭界面的指令;
生成模块64,用于响应于接收到关闭界面的指令,生成操作指令。
在一个实施例中,如图8所示,上述装置还可包括:
第二获取模块65,用于获得垃圾回收信息,垃圾回收信息中包含注销的界面的界面标识;
回收模块66,用于执行垃圾回收操作,根据界面标识将注销的界面的变量和空布局回收。
本实施例中,垃圾回收信息中包含注销的界面的界面标识,从而在执行垃圾回收操作时,可以快捷、准确的确定出要回收的界面,以及该界面所引用的变量和空布局。
在一个实施例中,重置模块62,可包括:
重置子模块,用于将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空。
当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,原则上讲不能够释放进入环境的变量所占的内存,因为它们随时可能会被调用。因此,不回收环境中的变量、被环境中的变量所引用的变量,而是将变量中除环境中的变量、被环境中的变量所引用的变量之外的变量置为空,以便于垃圾回收器回收这些变量及其所占用内存空间。
在一个实施例中,上述变量为局部变量。
由于回收的是不再使用的变量,也就是生命周期结束的变量,由于全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后在函数中使用这些变量,直至函数结束。一旦函数结束,局部变量就没有存在必要了,可以释放它们占用的内存。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。