内存压缩方法、装置及电子设备与流程

文档序号:21318604发布日期:2020-06-30 20:49阅读:217来源:国知局
本申请涉及计算机
技术领域
:,更具体地,涉及一种内存压缩方法、装置及电子设备。
背景技术
::在电子设备的内存不足时,通常需要对内存进行压缩。然而,现有的内存压缩方法,容易导致一些应用出现卡顿等问题。技术实现要素:鉴于上述问题,本申请提出了一种内存压缩方法、装置及电子设备,用以改善上述问题。第一方面,本申请实施例提供了一种内存压缩方法,包括:当内存不足时,确定待压缩的内存页面;确定需要实时处理的目标线程;判断所述待压缩的内存页面是否与所述目标线程关联;若所述待压缩的内存页面没有与所述目标线程关联,则对所述待压缩的内存页面进行压缩。第二方面,本申请实施例提供了一种内存压缩装置,包括:确定模块、判断模块以及压缩模块。其中,所述确定模块用于当内存不足时,确定待压缩的内存页面,以及确定需要实时处理的目标线程。所述判断模块用于判断所述待压缩的内存页面是否与所述目标线程关联。所述压缩模块用于当所述待压缩的内存页面没有与所述目标线程关联时,对所述待压缩的内存页面进行压缩。第三方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。第四方面,本申请实施例提供了一种计算机可读存储介质,其中存储有程序代码,所述程序代码可被处理器调用执行如上所述的方法。相对于现有技术,本申请提供的方案,可以在确定待压缩的内存页面后,判断该待压缩的内存页面是否与需要实时处理的目标线程相关联,如果否,再对该待压缩的内存页面进行压缩处理。如此,可以避免目标线程使用内存时解压缩内存页面中的数据所导致的应用卡顿的问题。本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1示出了本申请实施例提供的电子设备的方框示意图。图2示出了根据本申请一个实施例的内存压缩方法的流程示意图。图3示出了根据本申请另一个实施例的内存压缩方法的一种流程示意图。图4示出了图3所示步骤s210的子步骤示意图。图5示出了图3所示步骤s260的一种子步骤示意图。图6a示出了图3所示实施例中的第一数据的一种示意图。图6b示出了图3所示实施例中的第二数据的一种示意图。图7示出了图3所示步骤s260的另一种子步骤示意图。图8示出了图3所示实施例中内存压缩方法的另一种流程示意图。图9示出了本申请实施例提供的一种内存压缩装置的框图。图10是本申请实施例的用于保存或者携带实现根据本申请实施例的内存压缩方法的程序代码的存储单元。具体实施方式为了使本
技术领域
:的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。电子设备的内存可以被划分为多个内存页面(page),并可以以内存页面为单位,对内存进行管理。一个内存页面通常为512~8k字节(byte)。每个内存页面具有物理内存地址,该物理内存地址与一虚拟内存地址对应,电子设备的处理器可以通过虚拟内存地址来间接地访问对应的物理内存地址,从而访问该物理内存地址对应的内存页面中的数据。每个内存页面可以与一个或多个线程关联,当所述线程访问内存页面对应的虚拟内存地址时,则可以访问到该内存页面中的数据。实际应用中,当内存不足的时候,可以对一些内存页面进行压缩,例如,选择对最近最少使用(leastrecentlyused)的内存页面进行压缩,以释放一部分内存空间,并在需要使用这些内存页面中的数据时,再进行解压缩。然而,解压缩的过程需要耗费一定性能和时间,对于一些实时性要求较高的线程,可能导致该线程出现卡顿,进而导致该线程对于的应用出现卡顿。发明人经过长期的研究,提出一种内存压缩方法、装置及电子设备,可以避免线程在使用内存时进行内存解压缩处理所导致的卡顿问题。下面对该内容进行详细描述。请参照图1,图1为本申请实施例提供的电子设备的结构框图。电子设备100可以是智能手机、平板电脑、电子书、笔记本电脑、个人计算机(personalcomputer,pc)等任意具有数据处理功能的设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器110、存储器120及一个或多个程序,其中一个或多个程序可以被存储在存储器120中,并被配置为由一个或多个处理器110执行,一个或多个程序配置用于执行下文描述的内存压缩方法。处理器110可以包括一个或多个处理核。处理器110利用各种借口和线路连接整个电子设备100的各个部分,通过运行或执行存储在存储器120内的执行、程序、代码集或指令集,以及调用存储在存储器120中的数据,执行电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。处理器110可集成中央处理器(centralprocessingunit,cpu)、图像处理器(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。存储器120可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储移动终端100在使用中所创建的数据(比如下文中的第一数据、第二数据)等。可以理解,图1所示结构仅为示例,电子设备100还可以包括比图1所示更多或更少的组件,或是具有与图1所示完全不同的配置。本申请实施例对此没有限制。请参阅图2,图2为本申请一实施例提供的一种内存压缩方法的流程示意图,该方法可以应用于图1所示的电子设备100。下面对该方法的步骤进行阐述。步骤s110,当内存不足时,确定待压缩的内存页面。本实施例中,电子设备100中每个应用的运行都需要占用一定的内存,以用于预加载该应用需要使用的数据,从而加快读写操作的速度。但是,当内存被大量占用时,可能导致后续运行的应用内存分配不足,导致操作系统异常。其中,所述应用可以是独立的应用,也可以是运行于电子设备100中第三方平台的应用,例如运行于社交平台的小程序。其中,运行于第三方平台的应用可以通过用户界面(userinterface,ui)框架进行管控,所述ui框架例如可以是linui,本实施例不以此为限制。值得说明的是,linui是基于linux系统开发的框架,运行于内核态,在此状态下,线程和进程具有类似的结构。因此,本实施例描述的线程也可以是进程。实施过程中,电子设备100可以对设备中当前剩余的空闲内存大小进行监控,并根据监控到的数据来确定电子设备100的内存是否不足。如果充足,可以不做处理。如果不足,则表示需要进行内存压缩,从而可以选取用于进行压缩的内存页面,即所述待压缩的内存页面。示例性地,可以选取其中数据的使用频率较少的内存页面,例如,最近最少使用的内存页面。步骤s120,确定需要实时处理的目标线程。考虑到一些线程对于实时性要求较高,即,需要对数据实时处理,否则可能出现应用卡顿的问题,因而,本实施例中,从电子设备100的各线程中确定出对实时性要求较高的线程,作为目标线程,以便根据确定的目标线程来进一步判断是否需要对上述待压缩的内存页面进行压缩。步骤s130,判断所述待压缩的内存页面是否与所述目标线程关联。若是,则执行步骤s140;若否,则可以执行步骤s150。步骤s140,不对所述待压缩的内存页面进行压缩。步骤s150,对所述待压缩的内存页面进行压缩。本实施例中,每个内存页面与一个或多个线程关联,与内存页面关联的线程在运行过程中将会使用该内存页面中的数据。因此,如果待压缩的内存页面与目标线程关联,表示目标线程在运行时会使用待压缩的内存页面中的数据。那么,如果对待压缩的内存页面进行了压缩,目标线程后续需要使用待压缩的内存页面中的数据时,需要先进行解压缩处理,而解压缩处理需要耗费一定时间,从而导致实时性要求高的目标线程所对应的应用出现卡顿现象。基于此,当待压缩的内存页面与目标线程关联时,可以不对待压缩的内存页面进行压缩。如此,即可避免目标线程在后续使用待压缩的内存页面的数据时进行解压缩处理,从而可以避免因解压缩处理所导致的卡顿问题。此外,如果待压缩的内存页面与目标线程没有关联,表示目标线程在运行时不会使用待压缩的内存页面,后续也不存在因解压缩处理而导致卡顿的问题。因此,通过判断待压缩的内存页面是否与实时性要求高的目标线程关联,并在待压缩的内存页面没有与目标线程关联时,再对待压缩的内存页面进行压缩,可以从待压缩的内存页面中至少部分地排除与实时性要求高的目标线程关联的待压缩的内存页面,从而避免目标线程因后续的解压缩处理导致应用卡顿,影响用户体验,降低用户粘性。请参照图3,图3为本申请另一实施例提供的一种内存压缩方法,可以应用于图1所示的电子设备100,下面对该方法包括的步骤进行描述。步骤s210,当内存不足时,将不活跃匿名页面链表中的匿名页面确定为待压缩的内存页面。本实施例的一种可选的方式中,电子设备100可以通过图4所示的流程来监测内存是否不足。详细描述如下。步骤s211,接收内存分配请求,所述内存分配请求包括请求分配的第一内存大小。实际应用中,当需要运行一个线程时,通常需要为该线程分配对应的内存空间。以上述的linui为例,当电子设备100中的第三方平台需要运行某一个线程时,会向linui发送内存分配请求,该内存分配请求包括请求分配给该线程的内存的大小,所述大小即为第一内存大小。步骤s212,判断当前剩余的第二内存大小与所述第一内存大小的差值是否达到内存阈值。若是,则执行步骤s213;若否,则执行步骤s214。步骤s213,确定内存没有不足。步骤s214,确定内存不足。其中,内存阈值可以灵活设定,比如可以根据统计数据来设定。在接收到内存分配请求之后,可以获取电子设备100当前剩余的内存大小,该内存大小即为所述第二内存大小。然后,可以计算第二内存大小与第一内存大小的差值,并将所述差值与所述内存阈值比较。一个例子中,假设内存阈值为10m,当前剩余的内存大小(即,第二内存大小)为30m,请求分配的第一内存大小为20m,则可以计算第二内存大小与第一内存大小的差值为10m,达到了10m,可以确定当前内存没有不足。另一个例子中,假设内存阈值为10m,当前剩余的第二内存大小为25m,请求分配的第一内存大小为20m,则可以计算出所述差值为5m,没有达到内存阈值10m,从而可以判定当前的内存是不足的。可以理解,图4所示流程仅为示例。比如,还可以设置多个内存大小范围,根据所述第二内存大小与所述第一内存大小的差值所处的内存大小范围,来确定内存是否不足。本实施例对此没有限制。本实施例中,内存页面按照页面类型可以分为匿名页面(anonynouspage)和文件页面,按照活跃性可以分为活跃页面和不活跃页面。文件页面通常是指电子设备100的系统可以直接回收的内存页面,匿名页面通常是指动态分配的堆内存,无法被直接回收,后续还可能被再次访问的内存页面。电子设备100可以维护有lru链表,lru链表是双向链表。lru链表中记录了内存页面。本实施例中,电子设备100根据内存页面的页面类型和活跃性,可以将lru链表分为以下几种类型:不活跃匿名页面链表、活跃匿名页面链表、不活跃文件页面链表和活跃文件页面链表。其中,活跃匿名页面链表中记录了活跃匿名页面,不活跃匿名页面链表中记录了不活跃匿名页面,活跃文件页面链表记录了活跃文件页面,不活跃文件页面记录了不活跃文件页面。由于匿名页面无法直接回收,本实施例中,从匿名页面中选取待压缩的内存页面。详细地,不活跃匿名页面链表中记录的匿名页面均为最近使用较少的匿名页面,而最近使用较少的匿名页面在较短时间内通常不会频繁被使用,因而,可以将不活跃匿名页面链表中的匿名页面作为待压缩的内存页面。进一步地,不活跃匿名页面链表中的匿名页面通常是从活跃匿名页面链表中移动过来的。示例性地,匿名页面刚被分配时,会从活跃匿名页面链表的头部被添加到活跃匿名页面链表中,经过活跃匿名页面链表的一段时间的更新,该匿名页面到达活跃匿名页面链表的尾部,从而被电子设备100将该匿名页面加入不活跃匿名页面链表。可见,活跃匿名页面链表的尾部的匿名页面,是最近活跃度较低的匿名页面,因而可以将活跃匿名页面链表的尾部的目标数量个匿名页面确定为待压缩的内存页面。其中,目标数量可以灵活设定,例如可以是1-5,例如可以为3。一种可能的实施方式中,可以在确定所有待压缩的内存页面之后,分别针对每个待压缩的内存页面执行后续的步骤s220-步骤s260。另一种可能的实施方式中,可以遍历不活跃匿名页面链表中的匿名页面,针对当前访问的匿名页面,将当前访问的匿名页面确定为待压缩的内存页面,再针对当前确定的待压缩的内存页面执行后续的步骤s220-步骤s260。对应地,还可以从尾部向头部依次访问活跃匿名页面链表中的目标数量个匿名页面,并将当前访问的匿名页面确定为待压缩的内存页面,再针对当前确定的待压缩的内存页面执行后续的步骤s220-步骤s260。步骤s220,确定需要实时处理的目标线程。本实施例中,目标线程可以是ui线程或者实时线程。其中,ui线程对实时性要求较高,如果处理不够及时,可能导致丢帧。基于此,步骤s220可以通过以下步骤中的至少一者实现:将ui线程确定为所述目标线程;将实时线程确定为所述目标线程。步骤s230,确定所述目标线程的页表(pagetable,pt),所述页表包括分别与不同内存页面对应的多个页表项(pagetableentry,pte)。本实施例中,每个线程具有页表,页表包括多个页表项,每个页表项可以包含一内存页面的虚拟内存地址和物理内存地址的映射关系。当线程访问某一虚拟内存地址时,可以从该线程的页表中查找到包含该虚拟内存地址的页表项,进而访问该页表项中的物理内存地址,从而访问到该物理内存地址所指示的内存页面中的数据。其中,若某一页表项包含某一内存页面的虚拟内存地址或物理内存地址,则可以视作该页表项与该内存页面相互对应。步骤s240,从所述页表中查找是否存在与所述待压缩的内存页面对应的页表项。若是,执行步骤s250;若否,则执行步骤s270。实施过程中,当一个线程t1的页表a1中存在某一页表项pte-1,该页表项pte-1包含某一内存页面p1的虚拟内存地址或物理内存地址时,表示页表项pte-1与内存页面p1对应,线程t1可能会通过页表项pte-1来访问内存页面p1中的数据,即,线程t1与内存页面p1关联。因此,当目标线程的页表中存在与待压缩的内存页面对应的页表项时,可以确定待压缩的内存页面与目标线程关联。当一个线程t2的页表a2中不存在包含内存页面p2的虚拟内存地址或物理内存地址的页表项时,表示线程t2不会访问内存页面p2中的数据,即,线程t2没有与内存页面p2关联。当目标线程的页表中不存在与待压缩的内存页面对应的页表项时,可以确定待压缩的内存页面没有与目标线程关联。步骤s250,确定所述待压缩的内存页面与所述目标线程关联,不对所述待压缩的内存页面进行压缩。步骤s260,确定所述待压缩的内存页面没有与所述目标线程关联,对所述待压缩的内存页面进行压缩。步骤s250和步骤s260的详细实现逻辑,可以参照前一实施例中关于步骤步骤s130-步骤s150的详细描述,在此不再赘述。通过图3所示流程,可以避免实时性要求高的目标线程因使用内存时的解压缩处理而导致的应用卡顿。特别地,当目标线程是ui线程时,如果ui线程无法及时渲染,将会导致丢帧,而通过图3所示的流程,可以降低ui线程丢帧率。经测试,总体丢帧数量可以减少40%。可选地,本实施例中,步骤s260中对所述待压缩的内存页面进行压缩的步骤可以通过图5所示流程实现,详细描述如下。步骤s261,获取待压缩的内存页面中的第一数据。如上所述,内存页面是指大小为512-8k字节的内存空间,其中存储有数据。在确定待压缩的内存页面之后,存储于所确定的待压缩的内存页面中存储的数据即为所述第一数据。对应地,实施过程中,可以从所确定的待压缩的内存页面中读取数据,读取到的数据即为所述第一数据。步骤s262,获取通过压缩算法处理所述第一数据的压缩结果,得到第二数据。本实施例中,压缩算法可以是任意能够实现数据压缩的算法,例如哈夫曼编码算法、游程长度编码、算数编码等,本实施例不以此为限制。比如,一个例子中,存储于待压缩的内存页面中的第一数据通常并非连续存储,而是分散地位于离散的位置,即待压缩的内存页面中可能存在许多内存碎片。例如图6a所示,其中示出了一个内存页面中的数据的分布位置,其中,空白的方框表示内存碎片。实际应用中,请求分配的通常是一段连续的内存空间,上述的内存碎片虽然没有存储数据,但无法被分配出去,从而导致浪费。因此,可以按照一定规则将内存页面中的数据移动到一起,从而可以使得内存碎片形成一段连续的内存空间。该规则可以视为压缩算法,该压缩算法通过改变第一数据的分布位置,得到第二数据。请参照图6b,其中示出了通过压缩算法处理后的内存页面中数据的分布位置,其中,空白的方框组成了一段连续的空闲内存空间。其中,图6a所示的内存页面存储的数据为第一数据,图6b所示的内存页面存储的数据为第二数据。步骤s263,存储所述第二数据。步骤s264,释放所述待压缩的内存页面。示例性地,图6a所示的内存页面中的第一数据实际占据的空间例如为1m,则经过压缩后,该内存页面中的第二数据实际占据的空间例如为0.7m,则可以将第二数据存储于0.7m大小的空间中,从而可以将待压缩的内存页面释放出来,以用于存储其他数据。其中,电子设备100可以将第二数据存储于与待压缩的内存页面不同的存储区。一种可选的方式中,该存储区可以是内存空间的一部分,在此情况下,上述示例中,可以释放出0.3m的内存空间。另一种可选的方式中,存储区也可以是其他存储介质,示例性地,电子设备100中通常会将硬盘中的一定空间预先划分出来作为交换(swap)分区,所述第二数据可以存储于该交换分区中。在此方式中,可以将整个待压缩的内存页面都释放出来,以用于存储其他数据。实际应用中,为了使得目标线程后续能够继续使用待压缩的内存页面中原本存储的第一数据,请参照图7,在执行步骤s264之前,步骤s260中对所述待压缩的内存页面进行压缩的步骤,还可以包括以下步骤:步骤s265,确定所述待压缩的内存页面对应的页表项,所述页表项包括所述待压缩的内存页面的物理内存地址。参照上文的描述,每个页表项包含一内存页面的虚拟内存地址和物理内存地址的映射关系,对应地,待压缩的内存页面对应的页表项中也包含待压缩的内存页面的物理内存地址和虚拟内存地址。步骤s266,在所述待压缩的内存页面对应的页表项中,将所述待压缩的内存页面的物理内存地址更新为所述第二数据的当前存储地址。实际应用中,目标线程需要访问待压缩的内存页面中的第一数据时,实际会请求访问待压缩的内存页面的虚拟内存地址,此时,电子设备100可以依据包含待压缩的内存页面的虚拟内存地址的页表项(即,待压缩的内存页面对应的页表项)来确定待压缩的内存页面的物理内存地址,以从所确定的物理内存地址获取需要的第一数据。然而,此时第一数据已经被压缩成第二数据,并被存储于不同于待压缩的内存页面的位置。因此,可以在释放待压缩的内存页面之前,将待压缩的内存页面对应的页表项中的物理内存地址更新为第二数据的当前存储地址。换言之,将待压缩的内存页面的虚拟内存地址与物理内存地址的映射关系,更新为待压缩的内存页面的虚拟内存地址与第二数据的当前存储地址的映射关系。如此,当电子设备100访问待压缩的内存页面的虚拟内存地址时,可以依据该虚拟内存地址与第二数据的当前存储地址的关系找到第二数据,进而进行后续的解压缩处理。可选地,请参照图8,在执行步骤s260之后,本实施例提供的内存压缩方法还可以包括图8所示的步骤。详细描述如下。步骤s270,响应目标线程对虚拟内存地址的访问指令,根据所述访问指令从所述目标线程的页表中查找包括所述虚拟内存地址的页表项,从查找到的页表项中确定第二数据的当前存储地址。实际应用中,在待压缩的内存页面被压缩之后,目标线程可能会请求访问待压缩的内存页面中的数据,此时,目标线程通常会发出包含待压缩的内存页面的虚拟内存地址的访问指令。电子设备100的处理器110检测到目标线程发出的访问指令时,如果识别出该访问指令包含虚拟内存地址,则可以访问目标线程的页表,从目标线程的页表包含的各页表项中查找包含识别出的虚拟内存地址的页表项。查找到的页表项中,除了识别出的虚拟内存地址之外,还包括另一地址,所述另一地址即为上述的第二数据的当前存储地址。步骤s280,从所述当前存储地址获取所述第二数据。实施过程中,在确定第二数据的当前存储地址之后,可以读取所述当前存储地址中的数据,读取的数据即为所述第二数据。步骤s290,确定与压缩算法对应的解压缩算法,获取通过所述解压缩算法处理所述第二数据的解压缩结果,得到第一数据。本实施例中,步骤s290采用的解压缩算法与步骤s262中采用的压缩算法相对应,即,步骤s290采用的解压缩算法是步骤s262采用的压缩算法的逆向处理过程。通过该解压缩算法可以将第二数据还原为第一数据。步骤s2100,将所述第一数据存储于一内存页面中,使所述目标线程访问该内存页面中的数据。在解压缩出第一数据之后,可以将第一数据存储于内存页面中,并可以将上述查找到的页表项中的当前存储地址更新为存储有解压缩得到的第一数据的内存页面的物理内存地址。如此,当目标线程访问上述识别出的虚拟内存地址时,可以访问到所述第一数据。请参阅图9,其示出了本申请实施例提供的一种内存压缩装置的结构框图。该内存压缩装置900可以包括:确定模块910、判断模块920以及压缩模块930。其中,确定模块910用于当内存不足时,确定待压缩的内存页面,以及确定需要实时处理的目标线程。可选地,所述确定模块910还可以用于:在确定待压缩的内存页面之前,接收内存分配请求,所述内存分配请求包括请求分配的第一内存大小;判断当前剩余的第二内存大小与所述第一内存大小的差值是否达到内存阈值;若否,则确定内存不足;若是,则可以确定内存没有不足。可选地,所述确定模块910可以通过如下方式确定待压缩的内存页面:将不活跃匿名页面链表中的匿名页面确定为所述待压缩的内存页面。可选地,所述确定模块910还可以通过如下方式确定待压缩的内存页面:将活跃匿名页面链表的尾部的目标数量个匿名页面确定为所述待压缩的内存页面。可选地,所述确定模块910确定需要实时处理的目标线程的方式包括以下方式中的至少一者:将用户界面线程确定为所述目标线程;将实时线程确定为所述目标线程。判断模块920用于判断所述待压缩的内存页面是否与所述目标线程关联。可选地,所述判断模块920判断所述待压缩的内存页面是否与所述目标线程关联的方式可以为:确定所述目标线程的页表,所述页表包括分别与不同内存页面对应的多个页表项;从所述页表中查找是否存在与所述待压缩的内存页面对应的页表项;若所述页表中不存在与所述待压缩的内存页面对应的页表项,则确定所述待压缩的内存页面没有与所述目标线程关联。对应地,若所述页表中存在与所述待压缩的内存页面对应的页表项,则可以确定所述待压缩的内存页面与所述目标线程关联。可选地,所述判断模块920还可以用于:当所述待压缩的内存页面与所述目标线程关联时,不对所述待压缩的内存页面进行压缩。压缩模块930用于当所述待压缩的内存页面没有与所述目标线程关联时,对所述待压缩的内存页面进行压缩。可选地,所述压缩模块930对所述待压缩的内存页面进行压缩的方式包括:获取所述待压缩的内存页面中的第一数据;获取通过压缩算法处理所述第一数据的压缩结果,得到第二数据;存储所述第二数据;释放所述待压缩的内存页面。可选地,在释放所述待压缩的内存页面之前,所述压缩模块830对所述待压缩的内存页面进行压缩的方式还可以包括:确定所述待压缩的内存页面对应的页表项,所述页表项包括所述待压缩的内存页面的物理内存地址;在所述待压缩的内存页面对应的页表项中,将所述待压缩的内存页面的物理内存地址更新为所述第二数据的当前存储地址。可选地,所述待压缩的内存页面对应的页表项还可以包括所述待压缩的内存页面的虚拟内存地址。基于此,所述装置900还可以包括解压缩模块。所述解压缩模块用于:在所述压缩模块930对所述待压缩的内存页面进行压缩之后,响应所述目标线程对虚拟内存地址的访问指令,根据所述访问指令从所述目标线程的页表中查找包括所述虚拟内存地址的页表项,从查找到的页表项中确定所述第二数据的所述当前存储地址;从所述当前存储地址获取所述第二数据;确定与所述压缩算法对应的解压缩算法,获取通过所述解压缩算法处理所述第二数据的解压缩结果,得到所述第一数据;将所述第一数据存储于一内存页面中,使所述目标线程访问该内存页面中的数据。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,所显示或讨论的模块相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。请参考图10,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质1000中存储有程序代码1010,所述程序代码1010可被处理器调用执行上述方法实施例中所描述的方法。计算机可读存储介质1000可以是诸如闪存、eeprom(电可擦除可编程只读存储器)、eprom、硬盘或者rom之类的电子存储器。可选地,计算机可读存储介质1000包括非瞬时性计算机可读介质(non-transitorycomputer-readablestoragemedium)。计算机可读存储介质1000具有执行上述方法中的任何方法步骤的程序代码1010的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1010可以例如以适当形式进行压缩。最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1