发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的对移动通信设备进行加速的方法及装置,能够清理系统内存,实现对移动通信设备的加速。
依据本发明的一个方面,提供了一种对移动通信设备进行加速的方法,所述移动通信设备中运行有未开放用户权限的操作系统,所述方法包括:
获取所述移动通信设备中处于空闲状态的内存的大小;
请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小大于所述处于空闲状态的内存的大小;以便所述虚拟内存系统在响应所述分配内存的请求时,将所述处于空闲状态的内存转化为活跃内存,并在发现处于空闲状态的内存不足以分配之后,将部分或全部处于非活跃状态的内存也转化为活跃状态;
在所请求的内存转化为活跃状态之后,请求虚拟内存系统为将所述转化为活跃状态的内存释放,以便所述虚拟内存系统在响应所述释放内存的请求时,将所述转化为活跃状态的内存转化为空闲状态,从而将原处于空闲状态的内存重新转化为空闲状态,并将所述部分或全部原处于非活跃状态的内存也转化为空闲状态。
可选地,所述获取所述移动通信设备中处于空闲状态的内存的大小时,还包括:
获取所述移动通信设备中处于非活跃状态的内存的大小;
获得所述移动通信设备中处于空闲状态以及非活跃状态的内存的大小之和;
所述请求虚拟内存系统为当前正在被使用的应用分配内存包括:
请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小等于所述处于空闲状态以及非活跃状态的内存的大小之和,分配成功后,所请求的内存转化为活跃状态。
可选地,所述获取所述移动通信设备中处于空闲状态的内存的大小之前还包括:
通过预置的入口接收用户发出的对移动通信设备进行加速的请求,通过所述请求触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
可选地,所述获取所述移动通信设备中处于空闲状态的内存的大小之前还包括:
获取所述移动通信设备中处于非活跃状态的内存的大小,如果所述处于非活跃状态的内存的大小达到预置的阈值,则触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
可选地,还包括:
在所述将部分或全部原处于非活跃状态的内存转化为空闲状态导致虚拟内存系统重新分配内存的状态之后,重新获取所述移动通信设备中处于空闲状态的内存的大小,以便继续对所述移动通信设备进行加速。
可选地,还包括:
接收到操作系统发出的没有可用于释放的内存的警告消息之后,停止对所述移动通信设备的加速处理。
可选地,还包括:
判断加速后的各状态的内存的大小,如果满足预置的条件,则停止对所述移动通信设备的加速处理。
可选地,所述未开放用户权限的操作系统包括iOS操作系统。
根据本发明的另一方面,提供了一种对移动通信设备进行加速的装置,所述移动通信设备中运行有未开放用户权限的操作系统,所述装置包括:
第一内存大小获取单元,用于获取所述移动通信设备中处于空闲状态的内存的大小;
内存分配请求单元,用于请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小大于所述处于空闲状态的内存的大小;以便所述虚拟内存系统在响应所述分配内存的请求时,将所述处于空闲状态的内存转化为活跃内存,并在发现处于空闲状态的内存不足以分配之后,将部分或全部处于非活跃状态的内存也转化为活跃状态;
内存释放请求单元,用于在所请求的内存转化为活跃状态之后,请求虚拟内存系统为将所述转化为活跃状态的内存释放,以便所述虚拟内存系统在响应所述释放内存的请求时,将所述转化为活跃状态的内存转化为空闲状态,从而将原处于空闲状态的内存重新转化为空闲状态,并将所述部分或全部原处于非活跃状态的内存也转化为空闲状态。
可选地,还包括:
第二内存大小获取单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小时,获取所述移动通信设备中处于非活跃状态的内存的大小;
内存之和获得单元,用于获得所述移动通信设备中处于空闲状态以及非活跃状态的内存的大小之和;
所述内存分配请求单元具体用于:
请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小等于所述处于空闲状态以及非活跃状态的内存的大小之和,分配成功后,所请求的内存转化为活跃状态。
可选地,还包括:
第一触发单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小之前,通过预置的入口接收用户发出的对移动通信设备进行加速的请求,通过所述请求触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
可选地,还包括:
第二触发单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小之前,获取所述移动通信设备中处于非活跃状态的内存的大小,如果所述处于非活跃状态的内存的大小达到预置的阈值,则触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
可选地,还包括:
继续加速单元,用于在所述将部分或全部原处于非活跃状态的内存转化为空闲状态导致虚拟内存系统重新分配内存的状态之后,重新获取所述移动通信设备中处于空闲状态的内存的大小,以便继续对所述移动通信设备进行加速。
可选地,还包括:
第一结束加速单元,用于接收到操作系统发出的没有可用于释放的内存的警告消息之后,停止对所述移动通信设备的加速处理。
可选地,还包括:
第二结束加速单元,用于判断加速后的各状态的内存的大小,如果满足预置的条件,则停止对所述移动通信设备的加速处理。
可选地,所述未开放用户权限的操作系统包括iOS操作系统。
根据本发明的对移动通信设备进行加速的方法及装置,可以通过用于进行加速的应用程序向虚拟内存系统请求某指定大小的内存空间,并保证该指定大小大于当前的空闲内存的大小,以便将原空闲内存连同原非活跃内存一并转化为活跃内存;之后,再请求虚拟内存系统将这些请求到的内存空间释放,使其重新转化为空闲空间,这样,就相当于将原空闲内存重新转化回空闲内存,同时将原非活跃内存也转化为空闲内存,相当于原非活跃内存被释放,空闲内存增加,也即清理了内存,实现了对移动通信设备的加速。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
首先需要说明的是,本发明人在实现本发明的过程中发现,iOS等未开放用户权限的操作系统是采用虚拟内存系统来管理内存的使用,将应用程序的逻辑地址映射到物理内存地址,使得进程认为自己拥有连续的、大量的内存,提高内存利用率,降低程序编写难度。比如一个程序被系统告知其可用的内存片段是0到100页,而实际上其占用的内存片段可能是分散的,有可能其占用的真正物理范围是70-120页,201页到240页,还有10页在磁盘上面,等等。如果一个应用程序执行时所要访问的内存在物理内存中不存在,则会在物理内存中分配一块新的区域,将磁盘上的对应的地址区域的内容加载进来。如果物理内存中空间不够,虚拟内存系统则会释放一些已占用的内存,来腾出内存空间给需要运行的应用程序。所以,可以通过一些手段来触发虚拟内存系统自动去释放已占用的内存,起到手机加速的效果。
另外需要说明的是,iOS操作系统启动后,在物理内存空间有一块联动内存(wired memory),存储内核以及其有关的数据结构,联动内存受到保护,无法被应用和其他用户级别的程序所分配或者释放。运行在联动内存的内核维护着三个物理内存页列表:
活跃列表(active list)–管理着活跃内存,最近被映射到物理内存的页,并且正在被程序使用中。
非活跃列表(inactive list)–管理着非活跃内存,当前在物理内存的页,但是最近未被使用。这些页载有长期为使用处于后台的应用程序的数据,允许被随时从物理内存中清除。
空闲列表(free list)–管理着空闲内存,物理内存中空闲的页,随时可以被程序分配使用。
联动内存、活跃内存都无法被释放,所以只能将释放的对象瞄准非活跃内存。如前面所述,“如果物理内存中空闲的内存空间不够,虚拟内存系统则会释放一些已占用的内存”,这个“已占用的内存”就是指非活跃内存。
因此,为了对移动通信终端进行加速,可以首先利用系统函数得到处于空闲状态的内存的大小,然后请求虚拟内存系统为当前正在使用的程序分配一块指定大小的内存区域,该内存区域的大小要大于当前处于空闲状态的内存的大小。这样,由于联动内存与活跃内存无法释放,而又无更多的空闲内存,所以虚拟内存系统会去强行释放一些非活跃内存,并将这些内存重新分配作为活跃内存以供使用。在这些内存被分配为活跃内存之后,就可以直接释放这些分配到的内存,这样,便将刚才的分配为活跃内存的非活跃内存释放出来,相当于清理了内存,增加空闲内存,减轻了为了维护非活跃内存而带来的能耗。下面就对该方法进行详细地介绍。
参见图1,本发明实施例首先提供了一种对移动通信设备进行加速的方法,该移动通信设备中运行有未开放用户权限的操作系统,例如iOS系统等,该方法可以包括以下步骤:
S101:获取所述移动通信设备中处于空闲状态的内存的大小;
可以通过iOS系统提供的系统函数,来获取处于空闲状态的内存的大小。在实际应用中,可以以应用程序的方式为用户提供对移动通信终端进行加速的功能,该应用程序可以是一个独立的程序,也可以是某程序中的一个功能模块。用户可以在其移动通信终端中安装该应用程序,然后用户就可以在需要对移动通信终端进行加速时,启动该应用程序,进入该应用程序的界面。可以在界面中为用户提供“立即加速”等按钮,然后当用户通过点击该按钮的方式进入之后,就可以触发该获取空闲内存的大小的步骤。或者,除了这种用户手动触发的方式之外,也可以通过自动的方式来触发,例如,该应用程序被启动之后,可以自动通过调用系统函数的方式来获取当前处于非活跃状态的内存的大小,然后将其与某预置的阈值(可以根据实际的需要来设定)进行比较,如果超过了该阈值,则证明当前处于非活跃状态的内存比较大,可能已经影响了系统的运行速度,于是自动触发该获取空闲内存的大小的步骤,等等。
S102:请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小大于所述处于空闲状态的内存的大小;以便所述虚拟内存系统在响应所述分配内存的请求时,将所述处于空闲状态的内存转化为活跃内存,并在发现处于空闲状态的内存不足以分配之后,将部分或全部处于非活跃状态的内存也转化为活跃状态;
在确定需要对移动通信设备进行加速之后,由于还获取到了当前处于空闲状态的内存的大小,因此,就可以首先请求虚拟内存系统为当前正在被使用的应用分配一块指定大小的内存,该指定大小大于在步骤S101中获取到的处于空闲状态的内存的大小。这样,在虚拟内存系统接收到该请求之后,就会发现空闲内存不够,于是就会释放一些处于非活跃状态的内存,然后将原处于空闲状态的内存以及这部分释放出来的非活跃内存一并分配给当前正在被使用的应用,也即将这些内存转化为活跃状态。
S103:在所请求的内存转化为活跃状态之后,请求虚拟内存系统为将所述转化为活跃状态的内存释放,以便所述虚拟内存系统在响应所述释放内存的请求时,将所述转化为活跃状态的内存转化为空闲状态,从而将原处于空闲状态的内存重新转化为空闲状态,并将所述部分或全部原处于非活跃状态的内存也转化为空闲状态。
在将指定大小的内存转换为活跃内存之后,本发明实施例中用于对移动通信设备进行加速的应用程序并不是利用这些内存进行数据的存储或处理等操作,而是直接将这些内存释放,这样,这些内存会被转化为空闲状态。此时被转化为空闲状态的内存就是在步骤S102中被转换为活跃状态的内存,而这部分内存的大小是大于步骤S101中获取到的空闲内存的大小,因此,该步骤S103中被转化为空闲状态的内存也大于步骤S101中获取到的空闲内存。也就是说,在经过步骤S102及S103的处理之后,使得移动通信设备中的空闲内存增加,相当于将原来处于非活跃状态的内存转化为空闲内存,这就相当于清理了内存,实现了对移动通信设备的加速。
总之,在本发明实施例提供的上述装置中,可以通过用于进行加速的应用程序向虚拟内存系统请求某指定大小的内存空间,并保证该指定大小大于当前的空闲内存的大小,以便将原空闲内存连同原非活跃内存一并转化为活跃内存;之后,再请求虚拟内存系统将这些请求到的内存空间释放,使其重新转化为空闲空间,这样,就相当于将原空闲内存重新转化回空闲内存,同时将原非活跃内存也转化为空闲内存,相当于原非活跃内存被释放,空闲内存增加,也即清理了内存,实现了对移动通信设备的加速。
其中,在实际应用中,为了获得最大的加速增益,可以在步骤S101获取当前处于空闲状态的内存大小的同时,获取当前处于非活跃状态的内存的大小,这样,在步骤S102向虚拟内存系统请求指定大小的内存时,该指定大小可以等于当前处于空闲状态以及非活跃状态的内存的大小之和。
也即,参见图2,请求虚拟内存系统分配非活跃内存大小与空闲内存大小总和的内存区域,即图2中最右侧的两个方框所在部分。此时,由于当前的空闲内存(也即图2中最右侧的一个方框所在部分)小于该请求分配的内存,因此,因此,非活跃内存便被强行释放并重新分配,与空闲内存一起成为活跃内存以供本发明实施例中的用于进行加速的应用程序使用。重新分配之后,会使得内存状态变为图3所示,也即,图2中原来的非活跃内存和空闲内存都变成了活跃内存。
在本发明实施例中的用于进行加速的应用程序获得内存之后,就可以再次释放已成为活跃内存的图3中最右侧的两块区域,使得这两块区域又成为了空闲内存,参见图4。也即,使得图1中的非活跃内存也被转化为空闲内存,从而起到了清理内存的作用。
以上实现过程可以通过以下伪代码来描述:
在实际应用中,在进行了一次前述从步骤S101到步骤S103的加速处理过程之后,由于非活跃内存的大小发生了变化(因为已经向部分或者全部的非活跃内存转化成了空闲内存),而非活跃内存属于运行于联动内存的内核维护的一部分,所以导致内核管理的任务变化,联动内存大小发生变化。这个时候,虚拟内存系统会重新更新内存的状态,联动内存、活跃内存和非活跃内存的大小可能会重新分配。也即,虽然看似能够将“全部”的非活跃内存都转化为空闲内存,并且从图4来看,似乎是已经不存在非活跃内存,但是实际上在将内存转化为图4的状态之后,操作系统中的虚拟内存系统会自动重新对内存进行分配,再分配出一部分非活跃内存。由于重新分配之后,又出现了一些非活跃内存,因此相当于还存在进一步加速的空间,这样,就可以继续进行加速处理,也即重新实行前述步骤S101到S103。当然,在释放到一定程度之后,可能会出现没有内存可以释放的情况,此时,系统会报出内存警告(memory warning),收到该警告之后,就可以不必再继续进行加速处理,换言之,只要是在此警告之前,都可以循环进行加速处理。
或者,也可以是根据一些预先设定的条件等来确定何时停止加速。例如,预先设定的条件可以是非活跃状态的内存小于某阈值,因此,在执行完一次加速处理之后,就可以获取处理后非活跃内存的大小,然后与该阈值进行比较,如果小于该阈值,则可以不再继续进行加速处理。也就是说,可以根据预先的经验等信息,来确定加速到什么程度,在达到该程度之后,即使系统尚未发出警告消息,也不必再继续进行加速。
另外,在实际应用中,在每完成一次加速处理之后,都可以根据加速前空闲内存的大小以及加速后空闲内存的大小计算出加速的比例等信息,然后将该信息显示给用户。
与本发明实施例提供的对移动通信设备进行加速的方法相对应,本发明实施例还提供了一种对移动通信设备进行加速的装置,所述移动通信设备中运行有未开放用户权限的操作系统,参见图5,该装置可以包括:
第一内存大小获取单元501,用于获取所述移动通信设备中处于空闲状态的内存的大小;
内存分配请求单元502,用于请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小大于所述处于空闲状态的内存的大小,分配成功后,所请求的内存转化为活跃状态;
内存释放请求单元503,用于在所请求的内存转化为活跃状态之后,请求虚拟内存系统为将所述转化为活跃状态的内存释放,以便所述虚拟内存系统在响应所述释放内存的请求时,将所述转化为活跃状态的内存转化为空闲状态,从而将原处于空闲状态的内存重新转化为空闲状态,并将所述部分或全部原处于非活跃状态的内存也转化为空闲状态。
为了在一次加速过程中最大程度的获得加速增益,该装置还可以包括:
第二内存大小获取单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小时,获取所述移动通信设备中处于非活跃状态的内存的大小;
内存之和获得单元,用于获得所述移动通信设备中处于空闲状态以及非活跃状态的内存的大小之和;
此时,所述内存分配请求单元502具体可以用于:
请求虚拟内存系统为当前正在被使用的应用分配内存,其中,所请求的内存的大小等于所述处于空闲状态以及非活跃状态的内存的大小之和,分配成功后,所请求的内存转化为活跃状态。
在实际应用中,该装置还可以包括:
第一触发单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小之前,通过预置的入口接收用户发出的对移动通信设备进行加速的请求,通过所述请求触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
或者,在另一种实现方式下,该装置还可以包括:
第二触发单元,用于所述获取所述移动通信设备中处于空闲状态的内存的大小之前,获取所述移动通信设备中处于非活跃状态的内存的大小,如果所述处于非活跃状态的内存的大小达到预置的阈值,则触发所述获取所述移动通信设备中处于空闲状态的内存的大小的操作。
为了进一步进行加速,该装置还可以包括:
继续加速单元,用于在所述将部分或全部原处于非活跃状态的内存转化为空闲状态导致虚拟内存系统重新分配内存的状态之后,重新获取所述移动通信设备中处于空闲状态的内存的大小,以便继续对所述移动通信设备进行加速。
其中,该系统还可以包括:
第一结束加速单元,用于接收到操作系统发出的没有可用于释放的内存的警告消息之后,停止对所述移动通信设备的加速处理。
或者,在另一种实现方式下,该装置还可以包括:
第二结束加速单元,用于判断加速后的各状态的内存的大小,如果满足预置的条件,则停止对所述移动通信设备的加速处理。
在实际应用中,所述未开放用户权限的操作系统包括iOS操作系统。
总之,在本发明实施例提供的上述装置中,可以通过用于进行加速的应用程序向虚拟内存系统请求某指定大小的内存空间,并保证该指定大小大于当前的空闲内存的大小,以便将原空闲内存连同原非活跃内存一并转化为活跃内存;之后,再请求虚拟内存系统将这些请求到的内存空间释放,使其重新转化为空闲空间,这样,就相当于将原空闲内存重新转化回空闲内存,同时将原非活跃内存也转化为空闲内存,相当于原非活跃内存被释放,空闲内存增加,也即清理了内存,实现了对移动通信设备的加速。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的对移动通信设备进行加速的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本申请可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。