CN108205472B - 内存释放方法、释放装置、计算机装置以及可读存储介质 - Google Patents
内存释放方法、释放装置、计算机装置以及可读存储介质 Download PDFInfo
- Publication number
- CN108205472B CN108205472B CN201710700782.3A CN201710700782A CN108205472B CN 108205472 B CN108205472 B CN 108205472B CN 201710700782 A CN201710700782 A CN 201710700782A CN 108205472 B CN108205472 B CN 108205472B
- Authority
- CN
- China
- Prior art keywords
- memory
- priority
- executed
- releasing
- unit
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种内存释放方法、释放装置、计算机装置以及可读存储介质,用于释放待回收进程的占用内存,且在释放待回收进程的占用内存时,减少其他进程的等待执行的时长。本申请实施例方法包括:获取目标进程的占用内存,该目标进程为待进行内存释放的进程;将该占用内存切分为至少两个部分内存;释放该至少两个部分内存中的每个部分内存,在释放该每个部分内存时,为该每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
Description
技术领域
本申请涉及计算机领域,特别涉及一种内存释放方法、释放装置、计算机装置以及可读存储介质。
背景技术
在实际应用中,使用终端时,随着运行的进程越来越多,占用的系统内存资源也越来越多,系统处理进程的速度也受到影响,因此,在使用进程后,需要进行内存回收。
在进行一个待回收进程的占用内存回收时,先扫描出待回收进程的占用内存的所有内存页面,然后释放该所有内存页面,当释放待回收进程的占用的所有内存页面时,将启用自旋锁锁定,此时,其他进程不能进行任何与内存相关的操作,只能等待所有内存页面都释放完成后,才能继续执行当前的待执行进程,该待执行进程才能继续对内存进行操作。
然而,待回收进程的占用内存越大,需要回收的内存资源也越大,回收内存资源的时间也越长,自旋锁锁定的时间越长,其他待执行进程在自旋锁锁定的时间内不能执行与内存相关的操作,只能等待待回收进程占用的内存页面全部回收之后才能继续执行,等待的时长也越长。
发明内容
本申请实施例提供了一种内存释放方法、释放装置、计算机装置以及可读存储介质,用于释放待回收进程的占用内存,且在释放待回收进程的占用内存时,减少其他进程的等待执行的时长。
有鉴于此,本申请第一方面提供一种内存释放的方法,其特征在于,包括:
获取目标进程的占用内存,该目标进程为待进行内存释放的进程;
将该占用内存切分为至少两个部分内存;
释放该至少两个部分内存中的每个部分内存,在释放该每个部分内存时,为该每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
可选地,该释放该至少两个部分内存中的每个部分内存之前,该方法还包括:
判断当前是否有等待执行的进程;
若是,则执行第一待执行进程,该第一待执行进程为当前等待执行的进程。
可选地,该释放该至少两个部分内存中的每个部分内存之前,该方法还包括:
判断当前是否有等待执行的进程;
若是,则获取第一优先级以及第二待执行进程的第二优先级,该第二待执行进程为当前等待执行的进程,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
判断该第二优先级是否高于该第一优先级;
若是,则执行该第二待执行进程;
若否,则释放该目标内存。
可选地,当等待执行的进程有至少两个时,该获取该目标进程的第一优先级以及第二待执行进程的第二优先级之前,该方法还包括:
获取该至少两个等待执行的进程的优先级;
从该至少两个等待执行的进程中确定优先级最高的进程作为该第二执行进程。
可选地,若当前等待执行的进程有至少两个时,获取第一优先级以及该至少两个等待执行的进程的优先级,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
执行该至少两个等待执行进程中优先级高于该第一优先级的进程。
可选地,该方法还包括:
若该第二优先级不高于该第一优先级,则判断该第二待执行进程的需求内存是否低于预置的第一阈值,该需求内存为该第二待执行进程执行时占用的内存;
若是,则将该第二优先级调整到高于该第一优先级,并执行该第二待执行进程;
若否,则释放该目标内存。
可选地,该方法还包括:
若该第二优先级不高于该第一优先级,则判断该目标内存是否高于预置的第二阈值;
若是,则将该第二优先级调整到高于该第一优先级,并执行该第二待执行进程;
若否,则释放该目标内存。
本申请第二方面提供一种内存释放装置,包括:
获取单元,用于获取目标进程的占用内存,该目标进程为待进行内存释放的进程;
切分单元,用于将该占用内存切分为至少两个部分内存;
释放单元,用于释放该至少两个部分内存中的每个部分内存,在释放该每个部分内存时,为该每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
可选地,该内存释放装置还包括:
第一判断单元,用于判断当前是否有等待执行的进程;
第一执行单元,当该第一判断单元的判断结果为是时,用于执行第一待执行进程,该第一待执行进程为当前等待执行的进程。
可选地,该内存释放装置还包括:第二判断单元以及第二执行单元;
该第二判断单元,用于判断当前是否有等待执行的进程;
该获取单元,当该第二判断单元的判断结果为是时,还用于获取第一优先级以及第二待执行进程的第二优先级,该第二待执行进程为当前等待执行的进程,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
该第二判断单元,还用于判断该第二优先级是否高于该第一优先级;
该第二执行单元,当该第二判断单元的判断结果为该第二优先级高于该第一优先级时,用于执行该第二待执行进程;
该释放单元,当该第二判断单元的判断结果为该第二优先级不高于该第一优先级时,还用于释放该目标内存。
可选地,该内存释放装置还包括:确定单元;
该获取单元,若当前等待执行的进程有至少两个时,还用于获取该至少两个等待执行的进程的优先级;
该确定单元,用于从该至少两个等待执行的进程中确定优先级最高的进程作为该第二执行进程。
可选地,该内存释放装置还包括:第三执行单元;
该获取单元,若当前等待执行的进程有至少两个时,还用于获取第一优先级以及该至少两个等待执行的进程的优先级,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
该第三执行单元,用于执行该至少两个等待执行进程中优先级高于该第一优先级的进程。
可选地,该内存释放装置还包括:第一调整单元;
该第二判断单元,当该第二优先级不高于该第一优先级时,还用于判断该第二待执行进程的需求内存是否低于预置的第一阈值,该需求内存为该第二待执行进程执行时占用的内存;
该第一调整单元,当该第二判断单元的判断结果为该第二待执行进程的需求内存低于预置的第一阈值时,用于将该第二优先级调整到高于该第一优先级;
该第二执行单元,当该第一调整单元将该第二优先级调整到高于该第一优先级时,还用于执行该第二待执行进程;
该释放单元,当该第二判断单元的判断结果为该第二待执行进程的需求内存不低于预置的第一阈值时,还用于释放该目标内存。
可选地,该内存释放装置还包括:第二调整单元;
该第二判断单元,当该第二优先级不高于该第一优先级时,还用于判断该目标内存是否高于预置的第二阈值;
该第二调整单元,当该第二判断单元的判断结果为该目标内存高于预置的第二阈值时,用于将该第二优先级调整到高于该第一优先级;
该第二执行单元,当该第二调整单元将该第二优先级调整到高于该第一优先级时,还用于执行该第二待执行进程;
该释放单元,当该第二判断单元的判断结果为该目标内存不高于预置的第二阈值时,还用于释放该目标内存。
本申请第三方面提供一种计算机装置,可以包括:
处理器、存储器、总线以及输入输出接口,该处理器、该存储器与该输入输出接口通过该总线连接;
该存储器,用于存储程序代码;
该处理器调用该存储器中的程序代码时执行本申请第一方面提供的方法的步骤。
本申请实施例第四方面提供一种存储介质,需要说明的是,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产口的形式体现出来,该计算机软件产品存储在一个存储介质中,用于储存为上述设备所用的计算机软件指令,其包含用于执行上述第一方面为内存释放装置所设计的程序。
该存储介质包括:U盘、移动硬盘、只读存储器(英文缩写ROM,英文全称:Read-OnlyMemory)、随机存取存储器(英文缩写:RAM,英文全称:Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例第五方面提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现上述第一方面中任意一项的内存释放的方法中的流程。
从以上技术方案可以看出,本申请实施例具有以下优点:
将待回收进程的占用内存分为至少两个部分,释放该至少两个部分内存中的每个部分内存,在释放该每个部分内存时,为该每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。释放完上一部分内存自旋锁解除后,下一部分内存自旋锁启用前,未启用自旋锁,其他进程可以在该间隙执行,执行完后再进行剩余的部分内存释放,无需再等待所有的占用内存都释放完后再执行,减少其他进程的等待时长。
附图说明
图1为内存释放过程示意图;
图2为本申请实施例中内存释放方法的一个流程示意图;
图3为本申请实施例中内存释放方法的另一个流程示意图;
图4为本申请实施例中内存释放方法的另一个流程示意图;
图5为本申请实施例中内存释放方法的另一个流程示意图;
图6为本申请实施例内存释放装置的一个实施例示意图;
图7为本申请实施例内存释放装置的另一个实施例示意图;
图8为本申请实施例内存释放装置的另一个实施例示意图;
图9为本申请实施例内存释放装置的另一个实施例示意图;
图10为本申请实施例内存释放装置的另一个实施例示意图。
具体实施方式
本申请实施例提供了一种内存释放方法、释放装置、计算机装置以及可读存储介质,用于释放待回收进程的占用内存,且在释放待回收进程的占用内存时,减少其他进程的等待执行的时长。
内存释放的过程如图1所示,当目前有待释放内存的进程时,先扫描出该进程占用的所有内存页面,然后等待其他进程执行完后,释放该进程占用的所有内存页面,在释放开始时,将启用自旋锁,自旋锁是专为防止多处理器并发而引入的一种锁,启用自旋锁时其他进程不能执行与内存相关的操作,等待所有的内存页面都释放完成后,将解除自旋锁,此时其他进程可以执行与内存相关的操作。在自旋锁启用的时长内,其他进程不能进行与内存相关的操作,只能进行等待。例如,在释放一个进程的占用内存时,将启用自旋锁,释放该占用内存需要10分钟,那么,其他进程只能等待10分钟后解除自旋锁才能开始执行。
下面结合说明书附图对本申请实施例的流程进行具体说明,请参阅图2,本申请实施例中内存释放方法的一个流程示意图,包括:
201、获取目标进程的占用内存;
该目标内存为等待释放内存的进程,获取目标进程的占用内存可以是扫描出该目标进程占用的所有内存页面。
202、将占用内存切分为至少两个部分内存;
将等待释放内存的进程所占用的内存切分为至少两个部分内存,例如,该进程占用了200个内存页面,则可以将该200个内存页面分为5个部分,每一个部分40个内存页面。
203、释放至少两个部分内存中的每个部分内存,在释放每个部分内存时,为每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
按预置的顺序释放该至少两个部分内存中的每个部分内存,在释放每个部分内存开始的时刻,为该每个部分内存启用自旋锁,在释放完该每个部分内存后解除自旋锁。每释放一个部分内存开始时,都要为该部分内存启用自旋锁,在释放完该部分内存后再解除自旋锁。在释放完上一部分内存解除自旋锁之后,释放下一个部分内存启用自旋锁之前,未启用自旋锁,此时待释放进程让出执行权,可以执行其他进程。
在本申请实施例中,首先获取待释放进程的占用内存,将该占用内存分为至少两个部分,然后按照顺序释放该至少两个部分中的每个部分内存,在释放该每个部分内存开始时,为该每个部分内存启用自旋锁,在释放完该每个部分内存后再解除自旋锁,在解除自旋锁之后,释放下一个部分内存启用自旋锁之前,未启用自旋锁,此时待释放进程让出执行权,可以执行其他等待执行的进程,不需要等待待释放进程的占用内存全部释放完后才能继续执行,可以减少其他进程的等待时间。
在实际应用中,若此时准备释放一个进程,首先扫描该进程的所有内存页面,将该所有内存页面分为多个部分,例如,可以分为每个部分32个内存页面。在释放每个部分内存开始时,为该每个部分内存启用自旋锁,释放完成后解除自旋锁,在释放完一个部分内存解除自旋锁后,释放下一个部分内存启用自旋锁前,未启用自旋锁,其他待执行的内存可以在此时执行。
下面对本申请实施例的流程进行进一步说明,本申请实施例在释放待释放进程的每个部分内存时,对于在释放完一个部分内存自旋锁解除后,释放下一部分内存自旋锁启用前,待执行进程与释放下一部分内存的执行顺序有不同的方案:
一、在未启用自旋锁时直接执行待执行进程
请参阅图3,本申请实施例中内存释放方法的另一个流程示意图,包括:
301、获取目标进程的占用内存;
302、将占用内存切分为至少两个部分内存;
本实施例中的步骤301至步骤302与前述图2所示实施例中的步骤201至步骤202类似,此处不再赘述。
303、判断当前是否有等待执行的进程,若是,则执行步骤304,若否,则执行步骤305;
判断当前是否有等待执行的进程,若有等待执行的进程,则执行步骤304,没有等待执行的进程,则执行步骤305。应理解,等待执行的进程可以是一个,也可以是至少两个,具体此处不作限定。
304、执行第一待执行进程;
该第一待执行进程为当前等待执行的进程,在未启用自旋锁时,执行该第一待执行进程。
305、释放至少两个部分内存中的每个部分内存,在释放剩余部分内存时,为每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
本实施例中的步骤305与前述图2所示实施例中的步骤205类似,此处不再赘述。
应理解,步骤304中执行第一待执行进程的步骤,可以是在当前释放至少两个部分内存,释放完上一部分内存解除自旋锁之后,下一部分内存自旋锁启用前。
在本申请实施例中,首先获取待释放进程的占用内存,将该占用内存分为至少两个部分,然后按照顺序释放该至少两个部分中的每个部分内存,在释放该每个部分内存开始时,为该每个部分内存启用自旋锁,在释放完该每个部分内存后再解除自旋锁,在释放完一个部分内存自旋锁解除后,释放下一部分内存自旋锁启用前,判断当前是否有等待执行的进程,若有等待执行的进程,则执行该等待执行的进程。减少了待执行进程的等待时间,无需再等待所有内存都释放完成后再执行。
在实际应用中,若此时准备释放一个进程1,首先扫描该进程的所有内存页面,将该所有内存页面分为5个部分,例如,可以分为每一个部分50个内存页面,在释放每个部分内存开始时,为该每个部分内存启用自旋锁,释放完成后解除自旋锁,在释放完第2部分内存解除自旋锁后,释放第3部分内存启用自旋锁前,检测到此时有等待执行的进程,则执行该等待执行的进程,执行完成后继续释放第3部分内存。
二、将一个待执行进程的优先级与释放目标内存的进程的优先级进行比较
请参阅图4,本申请实施例中内存释放方法的另一个流程示意图,包括:
401、获取目标进程的占用内存;
402、将占用内存切分为至少两个部分内存;
本实施例中的步骤401至步骤402与前述图2所示实施例中的步骤201至步骤202类似,此处不再赘述。
403、判断当前是否有等待执行的进程,若是,则执行步骤404,若否,则执行步骤407;
判断当前是否有等待执行的进程,若当前有一个待执行进程,则将该待执行进程作为第二待执行进程,继续执行步骤404;若当前有至少两个待执行的进程,则比较该至少两个待执行进程中每个进程的优先级,确定该至少两个待执行进程中优先级高的进程,作为第二待执行进程;执行步骤404,若当前没有待执行进程,则执行步骤407。
404、获取第一优先级以及第二待执行进程的第二优先级;
获取释放目标内存的进程的第一优先级以及第二待执行进程的第二优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存,该释放目标内存的进程为释放该目标内存的进程。
405、判断第二优先级是否高于第一优先级,若是,则执行步骤406,若否,则执行步骤407;
判断第二待执行进程的第二优先级是否高于第一优先级,若第二优先级高于第一优先级,则执行步骤406,若第二优先级不高于第一优先级,则执行步骤407。
需要说明的是,若第二优先级不高于第一优先级,可以是,判断该第二待执行进程执行时所需的内存是否低于预置的第一阈值,若是,则将第二优先级调整到高于第一优先级,并执行步骤406,若否,则执行步骤407,也可以是,判断即降释放的下一部分内存所占用的内存是否高于预置的第二阈值,若是,则将第二优先级调整到高于第一优先级,并执行步骤406,若否,则执行步骤407,具体此处不作限定。
还需要说明的是,若步骤403中判断当前是否有等待执行的进程时,若有多个待执行进程,则选取优先级高的作为第二待执行进程,并将第二待执行进程的第二优先级与第一优先级作比较,对于多个待执行进程中的不高于该第二进程优先级的进程是否与目标进程的第一优先级作比较,此处不作限定。
406、执行第二待执行进程;
该第二待执行进程为当前等待执行的进程,在未启用自旋锁时,执行该第二待执行进程。
407、释放至少两个部分内存中的每个部分内存,在释放每个部分内存时,为每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
本实施例中的步骤407与前述图2所示实施例中的步骤205类似,此处不再赘述。
应理解,步骤406中执行第一待执行进程的步骤,可以是在当前释放至少两个部分内存,释放完上一部分内存解除自旋锁之后,下一部分内存启用自旋锁之前。
在本申请实施例中,首先获取待释放进程的占用内存,将该占用内存分为至少两个部分,然后按照顺序释放该至少两个部分中的每个部分内存,在释放该每个部分内存开始时,为该每个部分内存启用自旋锁,在释放完该每个部分内存后再解除自旋锁,可以在释放完一个部分内存自旋锁解除后,在释放下一部分内存自旋锁启用前,判断当前是否有待执行进程,若有,则比较该待执行进程的第二优先级与第一优先级,该第一优先级为释放该至少两个部分内存中当前等待释放部分内存的进程的优先级,若有多个待执行进程,则选取该多个待执行进程中优先级高的进程作为该待执行进程,若第二优先级高于第一优先级,则执行待执行进程,若第二优先级高于第一优先级,还可以判断该待执行进程的需求内存是否低于预置的第一预置或目标进程中等待释放的下一个部分内存的占用内存是否高于预置的第二阈值,若是,则将该第二优先级调整到高于该第一优先级,并执行该待执行进程,然后再释放当前等待释放的下一个部分内存,缩短了当前待执行进程的响应时长,提高用户体验。
在实际应用中,若当前准备释放一个进程1占用的内存,首先扫描该进程的所有内存页面,若该进程1的占用内存为100MB,将该占用内存分为5个部分,每个部分内存为20M,在释放每个部分内存开始时,为该每个部分内存启用自旋锁,释放完成后解除自旋锁,在释放完第2部分内存解除自旋锁后,释放第3部分内存启用自旋锁前,检测到此时有待执行的进程,若此时有多个待执行进程,则选取一个优先级最高的进程作为待执行进程,将该待执行进程的第二优先级与第一优先级比较,该第一优先级为释放第3部分内存的进程的优先级,若第二优先级高于第一优先级,则执行该待执行进程,若该第二优先级不高于第一优先级,可以执行完成后继续释放第3部分内存,还可以,判断该待执行进程的需求内存是否低于预置的第一预置或第3部分内存是否高于预置的第二阈值,例如,判断该待执行进程的需求内存是否低于2MB或第3部分内存是否高于15MB。若是,则将第二优先级调整为高于该第一优先级,并执行该待执行进程,执行完成后继续释放第3部分内存。
三、将多个待执行进程的优先级与释放目标内存的进程的优先级进行比较
请参阅图5,本申请实施例中内存释放方法的另一个流程示意图,包括:
501、获取目标进程的占用内存;
502、将占用内存切分为至少两个部分内存;
本实施例中的步骤501至步骤502与前述图2所示实施例中的步骤201至步骤202类似,此处不再赘述。
503、若当前等待执行的进程有至少两个,获取第一优先级以及至少两个等待执行的进程的优先级;
首先判断当前是否有两个待执行进程,若当前待执行的进程有至少两个,则获取释放目标内存的进程的第一优先级与该至少两个待执行进程中每个进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存,该释放目标内存的进程为释放该目标内存的进程。应理解,此处对当前低于至少两个待执行进程的执行步骤不作限定。
504、执行至少两个等待执行进程中优先级高于第一优先级的进程;
将该至少两个待执行进程中每个进程的优先级都与第一优先级比较,若该至少两个待执行进程中的进程的优先级高于第一优先级,则执行该进程,若该至少两个待执行进程中每个进程的优先级都低于第一优先级,则可以不执行待执行进程。
需要说明的是,对于该至少两个待执行进程中每个进程的优先级与第一优先级比较的比较顺序,可以按照需求内存从小到大开始比较,也可以按照当前已经等待的时长由长到短比较,还可以同时比较,具体此处不作限定。
505、释放至少两个部分内存中的剩余部分内存,在释放剩余部分内存时,为每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
本实施例中的步骤505与前述图2所示实施例中的步骤205类似,此处不再赘述。
应理解,步骤505中执行至少两个等待执行进程中优先级高于第一优先级的进程,可以是在当前释放该至少两个部分内存,释放完上一部分内存解除自旋锁之后,下一部分内存启用自旋锁之前。
在本申请实施例中,首先获取待释放进程的占用内存,将该占用内存分为至少两个部分,然后按照顺序释放该至少两个部分中的每个部分内存,在释放该每个部分内存开始时,为该每个部分内存启用自旋锁,在释放完该每个部分内存后再解除自旋锁,可以在释放完一个内存自旋锁解除后,在释放一部分内存自旋锁启用前,判断是否有至少两个待执行进程,若有,则获取释放目标内存的进程的第一优先级与该至少两个待执行进程中每个进程的优先级,该释放目标内存的进程为释放该至少两个部分内存中当前等待释放的一个部分内存的进程,并将该每个进程的优先级都与第一优先级比较,执行优先级高于该第一优先级的进程,执行完后继续释放待释放进程待释放的剩余部分内存。
在实际应用场景中,若当前准备释放一个进程1,首先扫描该进程的所有内存页面,若该进程1的占用内存为100MB,将该占用内存分为5个部分,每个部分内存为20M,在释放每个部分内存开始时,为该每个部分内存启用自旋锁,释放完成后解除自旋锁,在释放完第1部分内存解除自旋锁后,释放第2部分内存启用自旋锁前,检测到此时有至少两个待执行的进程,将该至少两个待执行进程的优先级与释放第2部分的进程的第一优先级比较,执行该至少两个待执行进程中优先级高于该第一优先级的进程,执行完成后继续释放第2部分内存。
上述对本申请实施例内存释放的方法进行了说明,下面对本申请实施例中的装置进行说明。
如图6所示,本申请实施例内存释放装置的一个实施例示意图,包括:
获取单元601,用于获取目标进程的占用内存,该目标进程为待进行内存释放的进程;
切分单元602,用于将获取单元601获取的占用内存切分为至少两个部分内存;
释放单元603,用于释放切分单元602切分的至少两个部分内存中的每个部分内存,在释放该每个部分内存开始时,为该每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁。
如图7所示,本申请实施例内存释放装置的另一个实施例示意图,包括:
获取单元701,切分单元702、释放单元703、第一判断单元704以及第一执行单元705。
本申请实施例中获取单元701,切分单元702以及释放单元703的功能与前述图6所示的实施例中描述的内容类似,此处不再赘述。
该第一判断单元704,用于判断当前是否有等待执行的进程;
该第一执行单元705,当该第一判断单元704的判断结果为是时,用于执行第一待执行进程,该第一待执行进程为当前等待执行的进程。
如图8所示,本申请实施例内存释放装置的另一个实施例示意图,包括:
获取单元801、切分单元802、释放单元803、第二判断单元804、第二执行单元805、确定单元806、第一调整单元807、第二调整单元808。
本申请实施例中获取单元801,切分单元802以及释放单元803的功能与前述图6所示的实施例中描述的内容类似,此处不再赘述。
可选地,在本申请的一些实施例中,
该第二判断单元804,用于判断当前是否有等待执行的进程;
该获取单元801,当该第二判断单元804的判断结果为是时,还用于获取第一优先级以及第二待执行进程的第二优先级,该第二待执行进程为当前等待执行的进程,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
该第二判断单元804,还用于判断该第二优先级是否高于该第一优先级;
该第二执行单元805,当该第二判断单元804的判断结果为该第二优先级高于该第一优先级时,用于执行该第二待执行进程;
该释放单元803,当该第二判断单元804的判断结果为该第二优先级不高于该第一优先级时,还用于释放目标内存,该目标内存为该至少两个部分内存中当前待释放的一个部分内存。
可选地,在本申请的一些实施例中,
该获取单元801,若当前等待执行的进程有至少两个时,还用于获取该至少两个等待执行的进程的优先级;
该确定单元806,用于从该至少两个等待执行的进程中确定优先级最高的进程作为该第二执行进程。
可选地,在本申请的一些实施例中,
该第二判断单元804,当该第二优先级不高于该第一优先级时,还用于判断该第二待执行进程的需求内存是否低于预置的第一阈值,该需求内存为该第二待执行进程执行时占用的内存;
该第一调整单元807,当该第二判断单元804的判断结果为该第二待执行进程的需求内存低于预置的第一阈值时,用于将该第二优先级调整到高于该第一优先级;
该第二执行单元805,当该第一调整单元807将该第二优先级调整到高于该第一优先级时,还用于执行该第二待执行进程;
该释放单元803,当该第二判断单元804的判断结果为该第二待执行进程的需求内存不低于预置的第一阈值时,还用于释放该目标内存。
可选地,在本申请的一些实施例中,
该第二判断单元804,当该第二优先级不高于该第一优先级时,还用于判断该目标内存是否高于预置的第二阈值;
该第二调整单元808,当该第二判断单元804的判断结果为该目标内存高于预置的第二阈值时,用于将该第二优先级调整到高于该第一优先级;
该第二执行单元805,当该第二调整单元808将该第二优先级调整到高于该第一优先级时,还用于执行该第二待执行进程;
该释放单元803,当该第二判断单元804的判断结果为该目标内存不高于预置的第二阈值时,还用于释放该目标内存。
如图9所示,本申请实施例内存释放装置的另一个实施例示意图,包括:
本申请实施例中获取单元901,切分单元902以及释放单元903的功能与前述图6所示的实施例中描述的内容类似,此处不再赘述。
该获取单元901,若当前等待执行的进程有至少两个时,还用于获取第一优先级以及该至少两个等待执行的进程的优先级,该第一优先级为释放目标内存的进程的优先级,该目标内存为该至少两个部分内存中当前待释放的一个部分内存;
第三执行单元904,用于执行该至少两个等待执行进程中优先级高于该第一优先级的进程。
图10是本申请实施例内存释放装置的另一个实施例示意图,该内存释放装置1000可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,终端设备U)1022(例如,一个或一个以上处理器)和存储器1032,一个或一个以上存储应用程序1042或数据1044的存储介质1030(例如一个或一个以上海量存储设备)。其中,存储器1032和存储介质1030可以是短暂存储或持久存储。存储在存储介质1030的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对内存释放装置中的一系列指令操作。更进一步地,中央处理器1022可以设置为与存储介质1030通信,在内存释放装置1000上执行存储介质1030中的一系列指令操作。
内存释放装置1000还可以包括一个或一个以上电源1026,一个或一个以上有线或无线网络接口1050,一个或一个以上输入输出接口1058,和/或,一个或一个以上操作系统1041,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由内存释放装置所执行的步骤可以基于该图10所示的内存释放装置结构。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请图2至图5各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (8)
1.一种内存释放的方法,其特征在于,包括:
获取目标进程的占用内存,所述目标进程为待进行内存释放的进程;
将所述占用内存切分为至少两个部分内存;
释放所述至少两个部分内存中的每个部分内存,在释放所述每个部分内存时,为所述每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁;
在释放完一个部分内存自旋锁解除后,释放下一部分内存自旋锁启用前,判断当前是否有等待执行的进程;
若有等待执行的进程,则执行所述等待执行的进程。
2.根据权利要求1所述的方法,其特征在于,所述释放所述至少两个部分内存中的每个部分内存之前,所述方法还包括:
判断当前是否有等待执行的进程;
若是,则获取第一优先级以及第二待执行进程的第二优先级,所述第二待执行进程为当前等待执行的进程,所述第一优先级为释放目标内存的进程的优先级,所述目标内存为所述至少两个部分内存中当前待释放的一个部分内存;
判断所述第二优先级是否高于所述第一优先级;
若是,则执行所述第二待执行进程;
若否,则释放所述目标内存。
3.根据权利要求1所述的方法,其特征在于,所述释放所述至少两个部分内存中的每个部分内存之前,所述方法还包括:
判断当前是否有两个待执行进程;
若当前等待执行的进程有至少两个时,获取第一优先级以及所述至少两个等待执行的进程的优先级,所述第一优先级为执行释放目标内存的进程的优先级,所述目标内存为所述至少两个部分内存中当前待释放的一个部分内存;
执行所述至少两个等待执行进程中优先级高于所述第一优先级的进程。
4.一种内存释放装置,其特征在于,包括:
获取单元,用于获取目标进程的占用内存,所述目标进程为待进行内存释放的进程;
切分单元,用于将所述占用内存切分为至少两个部分内存;
释放单元,用于释放所述至少两个部分内存中的每个部分内存,在释放所述每个部分内存时,为所述每个部分内存分别启用自旋锁,并在每释放完一个部分内存后解除释放完部分内存的自旋锁;
第一判断单元,用于在释放完一个部分内存自旋锁解除后,释放下一部分内存自旋锁启用前,判断当前是否有等待执行的进程;
第一执行单元,用于若有等待执行的进程,则执行所述等待执行的进程。
5.根据权利要求4所述的内存释放装置,其特征在于,所述内存释放装置还包括:第二判断单元以及第二执行单元;
所述第二判断单元,用于判断当前是否有等待执行的进程;
所述获取单元,当所述第二判断单元的判断结果为是时,还用于获取第一优先级以及第二待执行进程的第二优先级,所述第二待执行进程为当前等待执行的进程,所述第一优先级为释放目标内存的进程的优先级,所述目标内存为所述至少两个部分内存中当前待释放的一个部分内存;
所述第二判断单元,还用于判断所述第二优先级是否高于所述第一优先级;
所述第二执行单元,当所述第二判断单元的判断结果为所述第二优先级高于所述第一优先级时,用于执行所述第二待执行进程;
所述释放单元,当所述第二判断单元的判断结果为所述第二优先级不高于所述第一优先级时,还用于释放所述目标内存。
6.根据权利要求4所述的内存释放装置,其特征在于,所述内存释放装置还包括:第三判断单元以及第三执行单元;
所述第三判断单元,用于判断当前是否有两个等待执行的进程;
所述获取单元,若当前等待执行的进程有至少两个时,还用于获取第一优先级以及所述至少两个等待执行的进程的优先级,所述第一优先级为释放目标内存的进程的优先级,所述目标内存为所述至少两个部分内存中当前待释放的一个部分内存;
所述第三执行单元,用于执行所述至少两个等待执行进程中优先级高于所述第一优先级的进程。
7.一种计算机装置,其特征在于,包括:
处理器、存储器、总线以及输入输出接口;
所述存储器中存储有程序代码;
所述处理器调用所述存储器中的程序代码时执行权利要求1至3中任一项所述方法的步骤。
8.一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使得计算机执行如权利要求1至3中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710700782.3A CN108205472B (zh) | 2017-08-15 | 2017-08-15 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710700782.3A CN108205472B (zh) | 2017-08-15 | 2017-08-15 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108205472A CN108205472A (zh) | 2018-06-26 |
CN108205472B true CN108205472B (zh) | 2021-11-05 |
Family
ID=62603648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710700782.3A Active CN108205472B (zh) | 2017-08-15 | 2017-08-15 | 内存释放方法、释放装置、计算机装置以及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108205472B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113126883A (zh) * | 2019-12-30 | 2021-07-16 | 深圳Tcl新技术有限公司 | 一种数据处理方法、系统及存储介质 |
CN113377492B (zh) * | 2020-03-10 | 2022-05-24 | 阿里巴巴集团控股有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN112131009B (zh) * | 2020-09-30 | 2024-04-02 | Oppo广东移动通信有限公司 | 一种内存调度方法、装置及计算机可读存储介质 |
CN112769640B (zh) * | 2020-12-23 | 2022-09-16 | 中移(杭州)信息技术有限公司 | 进程通信方法、系统、服务器及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN101594700A (zh) * | 2008-05-29 | 2009-12-02 | 三星电子株式会社 | 划分无线终端的内存空间的方法和装置 |
CN105518631A (zh) * | 2014-08-08 | 2016-04-20 | 华为技术有限公司 | 内存管理方法、装置和系统、以及片上网络 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7856536B2 (en) * | 2007-10-05 | 2010-12-21 | International Business Machines Corporation | Providing a process exclusive access to a page including a memory address to which a lock is granted to the process |
KR101593161B1 (ko) * | 2014-10-02 | 2016-02-15 | 한국전자통신연구원 | 메모리 관리 장치 및 방법 |
-
2017
- 2017-08-15 CN CN201710700782.3A patent/CN108205472B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101594700A (zh) * | 2008-05-29 | 2009-12-02 | 三星电子株式会社 | 划分无线终端的内存空间的方法和装置 |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN105518631A (zh) * | 2014-08-08 | 2016-04-20 | 华为技术有限公司 | 内存管理方法、装置和系统、以及片上网络 |
Non-Patent Citations (1)
Title |
---|
Linux内存管理之页面回收;bullbat;《http://blog.csdn.net/bullbat/article/details/7311205》;20120302;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108205472A (zh) | 2018-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108205472B (zh) | 内存释放方法、释放装置、计算机装置以及可读存储介质 | |
CN108776897B (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
CN106961454B (zh) | 文件下载方法、装置及终端设备 | |
CN106101740B (zh) | 一种视频内容识别方法和装置 | |
MX2007014899A (es) | Mecanismo de concesion para busqueda. | |
JP6855428B2 (ja) | 走査対象情報を走査する方法、装置、及びコンピュータデバイス | |
RU2571562C2 (ru) | Способ, устройство и система для переноса ресурса | |
CN107153643B (zh) | 数据表连接方法及装置 | |
CN108897858B (zh) | 分布式集群索引分片的评估方法及装置、电子设备 | |
CN113377998A (zh) | 数据加载的方法、装置、电子设备及存储介质 | |
CN105808556B (zh) | 一种数据库的操作方法及数据库引擎 | |
CN107341255B (zh) | 键值数据处理方法、装置及电子设备 | |
CN113485855B (zh) | 一种内存共享方法、装置、电子设备及可读存储介质 | |
US10002158B2 (en) | Apparatus and method for processing a query | |
CN111478933A (zh) | 应用集群数据预加载方法、装置、存储介质、设备及系统 | |
CN106547583B (zh) | 一种操作系统安装方法以及装置 | |
US9977696B2 (en) | Methods and apparatus of adaptive memory preparation | |
CN113467901A (zh) | 一种任务调度的方法及相关设备 | |
CN113535338A (zh) | 用于数据接入的交互方法、系统、存储介质及电子设备 | |
CN107562582B (zh) | 一种自动重启并检测系统配置的方法 | |
CN106897089B (zh) | 系统操作执行方法及装置 | |
CN106649720B (zh) | 一种数据处理方法及服务器 | |
CN109542601B (zh) | 策略编译方法、装置、电子设备及计算机存储介质 | |
CN116881001B (zh) | 多dpu宿主机的云平台的管控方法、装置、设备及介质 | |
CN103889026A (zh) | 获取驻留频点的方法和用户终端 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |