CN116107702B - 内存管理方法、内存管理装置、电子设备及存储介质 - Google Patents
内存管理方法、内存管理装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116107702B CN116107702B CN202310167271.5A CN202310167271A CN116107702B CN 116107702 B CN116107702 B CN 116107702B CN 202310167271 A CN202310167271 A CN 202310167271A CN 116107702 B CN116107702 B CN 116107702B
- Authority
- CN
- China
- Prior art keywords
- target
- memory
- sub
- region
- area
- 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
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
本申请公开了一种Java虚拟机的内存管理方法、内存管理装置、电子设备及存储介质,内存管理方法包括以下步骤:在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个第二子区域与一个第一子区域一一映射;在触发全局内存垃圾回收的情况下,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置。如此,通过栈内存中选取部分而非全部的第二子区域进行初始标记,在初始标记阶段不需要暂停应用程序线程,然后对堆内存中对应的第一子区域进行并发回收和并发重置,从而Java虚拟机在进行全局内存垃圾回收时,应用线程和垃圾回收线程始终并行避免应用程序线程卡死。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种内存管理方法、内存管理装置、电子设备及存储介质。
背景技术
在Java虚拟机中,程序在运行时都在不断的产生对象和回收对象,而部分对象使用完后就无用了,因此程序会对该部分对象进行回收,达到释放内存空间的目的。
目前,在Java虚拟机进行内存管理时,其回收对象的机制会导致应用程序线程被挂起从而为回收对象的线程让路,导致影响业务的正常运行。具体而言,在Java虚拟机使用G1垃圾回收器在触发全局内存垃圾回收时,在垃圾回收的初始标记阶段会对堆内存执行全区域扫描,从而需要暂停应用程序线程以至于严重影响到正常业务的进行。
发明内容
本申请提供一种内存管理方法、内存管理装置、电子设备和存储介质,旨在解决现有技术中Java虚拟机进行内存管理时,回收空间的初始标记阶段会对堆内存执行全区域扫描导致需要暂停应用程序线程的问题。
本申请的第一方面,提出了一种Java虚拟机的内存管理方法,所述内存管理方法包括以下步骤:
在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个所述第二子区域与一个所述第一子区域一一映射;
在触发全局内存垃圾回收的情况下,在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置。
进一步的,所述第一子区域包括第一常规区域和第一大区域,所述第一常规区域用于存储常规对象,所述第二大区域用于存储大对象,所述第二子区域包括与所述第一常规区域和所述第一大区域一一映射的第二常规区域和第二大区域;其中,所述常规对象所占用的堆内存空间在阈值内,所述大对象所占用的堆内存空间超过阈值。
进一步的,所述在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置的步骤,包括:
在所述栈内存中选取所述第二大区域进行初始标记确定目标第二大区域;
对所述目标第二大区域对应的所述第一大区域进行并发标记确定目标第一大区域;
对所述目标第一大区域进行并发回收和并发重置;
判断所述堆内存的空间回收是否达到预定比例,并在达到所述预定比例的情况下确定所述全局内存垃圾回收完成。
进一步的,在确定所述堆内存的空间回收未达到所述预定比例的情况下,所述在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的第一子区域进行并发回收和并发重置的步骤,还包括:
在所述栈内存中选取预设数量的所述第二常规区域进行初始标记确定目标第二常规区域;
对所述目标第二常规区域对应的所述第一常规区域进行并发标记确定目标第一常规区域;
对所述目标第一常规区域进行并发回收和并发重置。
进一步的,所述对所述目标第二大区域对应的所述第一大区域进行并发标记确定目标第一大区域的步骤,包括:
将所述目标第一大区域设置为只读状态;
在对所述目标第一大区域进行并发回收和并发重置的步骤之后,所述内存管理方法的步骤还包括:
将所述目标第一大区域设置为可读写状态。
进一步的,所述对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置的步骤,包括:
对所述目标第二子区域对应的所述第一子区域执行回收价值度排序,由所述回收价值度从高到低的顺序来进行并发回收。
本申请的第二方面,提出一种Java虚拟机的内存管理装置,所述内存管理装置包括:
划分模块,用于在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个所述第二子区域与一个所述第一子区域一一映射;
处理模块,用于在触发全局内存垃圾回收的情况下,在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置。
进一步的,所述第一子区域包括第一常规区域和第一大区域,所述第一常规区域用于存储常规对象,所述第二大区域用于存储大对象,所述第二子区域包括与所述第一常规区域和所述第一大区域一一映射的第二常规区域和第二大区域;其中,所述常规对象所占用的堆内存空间在阈值内,所述大对象所占用的堆内存空间超过阈值。
本申请的第三方面,提出一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序以实现本申请第一方面提出的内存管理方法。
本申请的第四方面,还提出了一种存储介质,存储介质上存储有程序指令,程序指令用于执行本申请第一方面提出的内存管理方法。
本申请具有以下有益效果:由于将堆内存划分有多个第一子区域,并将栈内存划分有多个第二子区域,每个第二子区域与一个第一子区域对应,那么在触发全局内存垃圾回收的情况下,可以通过选择部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域执行并发回收和并发重置完成全局内存垃圾回收流程。
此时,在初始标记阶段开始,目标第二子区域以外的第二子区域所对应的第一子区域可正常进行新对象的申请等工作,从而避免了传统方案中对堆内存执行全域扫描来进行初始标记,也即避免Java虚拟机中应用程序线程需要等待全局内存垃圾回收完成再继续执行的问题。
附图说明
图1为本申请实施例的内存管理方法的流程示意图;
图2为本申请实施例的内存管理装置的模块示意图;
图3为本申请实施例的电子设备的模块示意图;
图4为本申请实施例的堆内存和栈内存划分后的示意图;
图5为本申请实施例的触发全局内存垃圾回收的流程示意图;
图6为本申请实施例的堆内存和栈内存划分后的又一示意图;
图7为本申请实施例的内存管理方法的流程示意图;
图8为本申请实施例的内存管理方法的流程示意图;
图9为本申请实施例的内存管理方法的流程示意图
图10为本申请实施例的内存管理方法的流程示意图
图11为本申请实施例的内存管理方法的流程示意图。
常用元件及符号:
电子设备100、存储器11、处理器12;
内存管理装置200、划分模块21、处理模块22。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。
本申请的描述中,除非另有明确的限定,设置、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本申请中的具体含义。
请参阅图1,本申请的第一方面提出了一种Java虚拟机的内存管理方法,内存管理方法包括以下步骤:
S10:在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个第二子区域与一个第一子区域一一映射;
S20:在触发全局内存垃圾回收的情况下,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置。
请参阅图2,本申请的第二方面提出了一种Java虚拟机的内存管理装置200,包括划分模块21和处理模块22。本申请提供的内存管理方法可由内存管理装置200实现,具体的,划分模块21用于在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个第二子区域与一个第一子区域一一映射;处理模块22用于在触发全局内存垃圾回收的情况下,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置。
请参阅图3,本申请的第三方面提出了一种电子设备100,电子设备100包括存储器11和处理器12,存储器11存储有计算机程序,处理器12执行计算机程序以用于在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个第二子区域与一个第一子区域一一映射,以及用于在触发全局内存垃圾回收的情况下,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置。
如此,由于将堆内存划分有多个第一子区域,并将栈内存划分有多个第二子区域,每个第二子区域与一个第一子区域对应,那么在触发全局内存垃圾回收的情况下,可以通过选择部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域执行并发回收和并发重置完成全局内存垃圾回收流程。
此时,在初始标记阶段开始,目标第二子区域以外的第二子区域所对应的第一子区域可正常进行新对象的申请等工作,从而避免了传统方案中对堆内存执行全域扫描来进行初始标记,也即避免Java虚拟机中应用程序线程需要等待全局内存垃圾回收完成再继续执行的问题。
具体地,需要说明的是,Java虚拟机(JVM,Java Virtual Machine),以下简称JVM,有分配内存的指令却没有释放内存的指令。JVM自身负责决定如何释放、以及何时释放不再被应用系统引用的对象所占据的内存。
其中,JVM中的内存管理实质上是通过不同的垃圾收集器来实现的。垃圾收集器是依据垃圾收集算法运行的系统线程。目前,主要的内存垃圾回收(GC,Garbage Collection)算法大致包括标记-清除(mark-sweep)算法、复制算法、标记-整理算法等。
然而不管采用哪种算法,当JVM在做全局内存垃圾回收时,存在只有内存垃圾回收线程在工作,应用中所有其它线程会暂停工作的问题。也就是说,此时系统会暂时停止响应外部请求,导致系统出现“假死”现象。
JVM内存分为方法区、栈、堆、寄存器等,其中堆所占有的内存空间最大,可以高达70%。JVM在进行内存垃圾回收时,主要是针对“堆”这部分内存进行的。堆可分“新生代”,“老年代”和“元空间”,大部分对象都在“新生代”被回收完毕,而部分在“新生代”多次未被回收的对象则会转移到“老年代”,当“老年代”的内存使用达到一定比例(该比例可配置,例如配置在80%)时,那么JVM就会触发FULL GC,也即全局内存垃圾回收,而FULL GC时,当前所有的垃圾回收器或多或少都需要暂停应用程序线程,这段时间所有线程挂起等待垃圾的回收,程序则出现卡死,严重影响到用户线程业务。
例如,在G1这一JVM广泛使用的垃圾回收器中,G1会将整个堆内存划分为若干个区域,每个区域都可以按照内存性质的需要将它指定为“新生代”或者“老年代”。在进行对象的回收时,对象的回收通常分为多个阶段,如初始标记,并发标记,重新标记,筛选回收,并发重制。
G1在对象的回收的初始标记和重新标记等阶段都存在有需要暂停应用程序线程的问题,这是由于区域在进行回收的时候,需要全局扫描所有可作为GC Root的应用,致使用户线程挂起影响用户线程业务。
有鉴于此,本申请提出一种内存管理方法解决JVM在触发全局内存垃圾回收时,垃圾回收线程与应用程序线程不能完全并行的问题。
具体地,本申请中的电子设备100可以台式电脑、笔记本电脑、平板电脑、移动终端等。
在步骤S10中,在堆内存中划分多个第一子区域可以理解为将完整的堆按逻辑拆分成多个区域,其中第一子区域可以用于存储对象,方便对象的分块回收。
并且,在栈内存中划分有多个第二子区域,每个第二子区域和一个第一子区域建立有一一映射关系。这样,将完整的栈拆分为多个和堆对应的区域,方便对象的分块回收。
需要说明的是,第一子区域和第二子区域均是逻辑独立的空间,可以单独进行回收。
如图4所示,图4中栈中的Region1……RegionN为第二子区域1……第二子区域N,Region1……N和BigRegion为第二子区域的不同类型;堆中的Region1……RegionN为第一子区域1……第一子区域N,Region1……N和BigRegion为第一子区域的不同类型。虚线表示每个第二子区域和一个第一子区域建立有一一映射关系。
在步骤S20中,在一个实施例中,部分可以为总数量的1/3占比,当然也可以为别的数量,根据程序设计的实际需求而定即可。
在JVM触发有全局内存垃圾回收的情况下,处理器12在栈内存中可以选取1/3比例的第二子区域进行初始标记确定目标第二子区域,目标第二子区域即为被初始标记的部分的第二子区域。
由于栈内存中划分的第二子区域与堆内存中划分的第一子区域一一映射,处理器12可以找到目标第二子区域对应的第一子区域进行并发回收和并发重置。
可以理解,为了进行并发回收和并发重置,处理器12对目标第二子区域所对应的第一子区域进行并发标记,被并发标记的第一子区域中包含有标记出的可回收对象,并发回收即是将上述可回收对象进行垃圾回收。
另外,初始标记也即GC Root标记,在目标第二子区域中标记有GC Root;进行并发标记后能够根据标记好的GC Root在对应的第一子区域中标记出可回收的对象。初始标记阶段,由于只是选取了栈内存中部分的第二子区域进行初始标记,而非对栈内存中所有的第二子区域执行扫描以标记GC Root,此时无需暂停用户线程,未被选择的第二子区域中以及与未被选择的第二子区域对应的第一子区域中,程序可正常申请空间。
可以理解,未并发重置前,并发回收的第一子区域由于并发标记,此时终止新对象的申请;因此处理器12可以对并发回收的第一子区域进行并发重置,在重置后与目标第二子区域对应的第一子区域重新开放,可被程序正常使用。
这样,请结合图5,通过在寻找GC Root,即进行初始标记时,用更小的粒度去寻找,也即用选取部分的第二子区域来代替全局搜索栈内存,从而保证应用程序线程和全局内存垃圾回收的线程始终保持并行执行,在垃圾回收的任何步骤中,用户线程都不会被阻塞。
请参阅图4和图6,在一些实施方式中,第一子区域包括第一常规区域和第一大区域,第一常规区域用于存储常规对象,第二大区域用于存储大对象,第二子区域包括与第一常规区域和第一大区域一一映射的第二常规区域和第二大区域;其中,常规对象所占用的堆内存空间在阈值内,大对象所占用的堆内存空间超过阈值。
如此,通过对第一子区域和第二子区域做进一步的细分,分开存储占用空间小的常规对象和占用空间大的大对象,从而便于提高垃圾回收时的效率。
具体地,如图4所示,图4中栈中的Region1……RegionN为第二常规区域1……第二常规区域N,BigRegion为第二大区域,栈中的BigRegion也可以有多个;堆中的Region1……RegionN为第一常规区域1……第一常规区域N,BigRegion为第一大区域,堆中的BigRegion也可以有多个。
图6中,一个第一子区域中可以存放有多个对象,例如R0……Rn可以为对象0,R10……R1n为对象1等;一个第二子区域中可以存放有这些对象对应的栈针,如R0……Rn为对象0的栈针0,R10……R1n为对象1的栈针1。
对应于大区域和常规区域的划分,第二大区域和第二常规区域分别存放了大对象的栈针和常规对象的栈针。常规对象所占用的堆内存空间在阈值内即为常规对象所占用的堆内存空间小于等于阈值;大对象所占用的堆内存空间超过阈值即为大对象所占用的堆内存空间大于阈值。
在一个实施例中,在程序创建对象时候会首先在栈内存的第二子区域创建栈针,然后再到堆内存中对应的第一子区域中申请一块空间用于数据的存储。此时若对象过大,则直接纳入大对象存储于第一大区域中,其栈针也同样存储于栈的第二大区域中。这样,将大对象单独分开主要是方便对象的回收,从而能够在相同时间复杂度的情况可回收更多的空间。
进一步地,在本申请提供的内存划分情况下,程序中某线程创建对象时为对象进行空间分配的详细步骤如下:
首先判断该线程是否已经存在,若存在直接索引到对应的栈内存的第二子区域,不存在则判断是否需要申请到新的某个第二子区域;然后在对应的第二子区域中为线程创建一个栈针,并根据栈内存中的refSet寻找对应的第二子区域在堆内存中对应的第一子区域的引用。
接着判断对象是否为大对象,若为大对象则存储在第一大区域中,否则则直接在对应的第一子区域开辟一块新空间,创建对象写入数据到对应堆内存的第一子区域中,同时,对象的引用进行压栈于栈内存的第二子区域中,对象为常规对象则压栈于第二常规区域,为大对象则压栈于第二大区域。
请参阅图7和图8,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置的步骤(S20),包括:
S21:在栈内存中选取第二大区域进行初始标记确定目标第二大区域;
S22:对目标第二大区域对应的第一大区域进行并发标记确定目标第一大区域;
S23:对目标第一大区域进行并发回收和并发重置;
S24:判断堆内存的空间回收是否达到预定比例,并在达到预定比例的情况下确定全局内存垃圾回收完成。
在某些实施方式中,处理模块22用于在栈内存中选取第二大区域进行初始标记确定目标第二大区域;及用于对目标第二大区域对应的第一大区域进行并发标记确定目标第一大区域;及用于对目标第一大区域进行并发回收和并发重置;及用于判断堆内存的空间回收是否达到预定比例,并在达到预定比例的情况下确定全局内存垃圾回收完成。
在某些实施方式中,处理器12用于在栈内存中选取第二大区域进行初始标记确定目标第二大区域;及用于对目标第二大区域对应的第一大区域进行并发标记确定目标第一大区域;及用于对目标第一大区域进行并发回收和并发重置;及用于判断堆内存的空间回收是否达到预定比例,并在达到预定比例的情况下确定全局内存垃圾回收完成。
如此,通过实现对大对象的优先标记和回收重置,从而可以在有效时间段内回收更多的空间,提高回收效率。
具体地,在一个实施例中,在步骤S21-步骤S24中,目标第二大区域可以为栈内存中全部的第二大区域,对第二大区域进行初始标记确定目标第二大区域,由于栈内存中划分的第二大区域与堆内存中划分的第一大区域一一映射,处理器12可以对目标第二大区域对应的第一大区域进行并发标记确定目标第一大区域,然后对目标第一大区域进行并发回收和并发重置。
可以理解,为了进行并发回收和并发重置,处理器12对目标第二大区域所对应的第一大区域进行并发标记获得目标第一大区域,目标第一大区域中包含有标记出的可回收大对象,并发回收即是将上述可回收大对象进行垃圾回收,并发重置则是将回收完成的目标第一大区域重新开放使用。
然后,判断堆内存的空间回收是否达到预定比例,并在达到预定比例的情况下确定全局内存垃圾回收完成。预定比例可以为回收到了50%、60%、70%、80%等,具体可以根据实际使用需求而定。
这样,优先标记大对象实现对大对象的回收,在有效时间段内回收更多的空间,提高回收效率。
请参阅图7和图9,在确定堆内存的空间回收未达到预定比例的情况下,在栈内存中选取部分的第二子区域进行初始标记确定目标第二子区域,并对目标第二子区域对应的第一子区域进行并发回收和并发重置的步骤(S20),还包括:
S25:在栈内存中选取预设数量的第二常规区域进行初始标记确定目标第二常规区域;
S26:对目标第二常规区域对应的第一常规区域进行并发标记确定目标第一常规区域;
S27:对目标第一常规区域进行并发回收和并发重置。
在某些实施方式中,处理模块22用于在栈内存中选取预设数量的第二常规区域进行初始标记确定目标第二常规区域;及用于对目标第二常规区域对应的第一常规区域进行并发标记确定目标第一常规区域;以及用于对目标第一常规区域进行并发回收和并发重置。
在某些实施方式中,处理器12用于在栈内存中选取预设数量的第二常规区域进行初始标记确定目标第二常规区域;及用于对目标第二常规区域对应的第一常规区域进行并发标记确定目标第一常规区域;以及用于对目标第一常规区域进行并发回收和并发重置。
如此,在仅回收大对象不满足堆内存空间回收需求的情况下,再执行常规对象的回收,提升回收效率。
具体地,在一个实施例中,在步骤S25-步骤S27中,预设数量可以为1/3比例的第二常规区域,对第二常规区域进行初始标记确定目标第二常规区域,由于栈内存中划分的第二常规区域与堆内存中划分的第一常规区域一一映射,处理器12可以对目标第二常规区域对应的第一常规区域进行并发标记确定目标第一常规区域,然后对目标第一常规区域进行并发回收和并发重置。
可以理解,为了进行并发回收和并发重置,处理器12对目标第二常规区域所对应的第一常规区域进行并发标记获得目标第一常规区域,目标第一常规区域中包含有标记出的可回收常规对象,并发回收即是将上述可回收常规对象进行垃圾回收,并发重置则是将回收完成的目标第一常规区域重新开放使用。
请参阅图10,在一些实施方式中,对目标第二大区域对应的第一大区域进行并发标记确定目标第一大区域的步骤(步骤S22),包括:
S220:将目标第一大区域设置为只读状态;
在对目标第一大区域进行并发回收和并发重置的步骤(S23)之后,内存管理方法的步骤还包括:
S230:将目标第一大区域设置为可读写状态。
在某些实施方式中,处理模块22用于将目标第一大区域设置为只读状态,以及用于将目标第一大区域设置为可读写状态。
在某些实施方式中,处理器12用于将目标第一大区域设置为只读状态,以及用于将目标第一大区域设置为可读写状态。
具体地,在一个场景中,在并发标记确定目标第一大区域时,将目标第一大区域设置为只读状态,不对外提供写的操作,如果此时程序需要创建大对象,那么会在另外的一个第一大区域中申请。直到在对目标第一大区域进行并发回收和并发重置后,将目标第一大区域设置为可读写状态,目标第一大区域才会再次对外提供服务。
请参阅图11,在一些实施方式中,对目标第二子区域对应的第一子区域进行并发回收和并发重置的步骤(步骤S20),包括:
S28:对目标第二子区域对应的第一子区域执行回收价值度排序,由回收价值度从高到低的顺序来进行并发回收。
在某些实施方式中,处理模块22可以用于对目标第二子区域对应的第一子区域执行回收价值度排序,由回收价值度从高到低的顺序来进行并发回收。
在某些实施方式中,处理器12可以用于对目标第二子区域对应的第一子区域执行回收价值度排序,由回收价值度从高到低的顺序来进行并发回收。
如此,可以优化内存垃圾回收的效率。
具体地,由上文可知目标第二子区域所对应的第一子区域为多个,为优化内存垃圾回收的效率,可以通过步骤S28优先回收价值度高的第一子区域。其中回收价值度可以根据第一子区域中的待回收对象数量、待回收对象对应的线程的重要程度等来判定。
本申请的第四方面,还提出了一种存储介质,存储介质上存储有程序指令,程序指令用于执行本申请第一方面提出的内存管理方法。
上述对本说明书特定实施例进行了描述。其他实施例在所附权利要求的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
程序指令包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或者某些中间形式等。存储介质包括:能够携带计算机程序代码的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM)、随机存取存储器(RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,存储介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
上面结合附图对本申请实施例作了详细说明,但是本申请不限于上述实施例,在技术领域普通技术人员所具备的知识范围内,还可以在不脱离本申请宗旨的前提下作出各种变化。
Claims (10)
1.一种Java虚拟机的内存管理方法,其特征在于,所述内存管理方法包括以下步骤:
在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个所述第二子区域与一个所述第一子区域一一映射;
在触发全局内存垃圾回收的情况下,在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置。
2.根据权利要求1所述的内存管理方法,其特征在于,所述第一子区域包括第一常规区域和第一大区域,所述第一常规区域用于存储常规对象,所述第一大区域用于存储大对象,所述第二子区域包括与所述第一常规区域和所述第一大区域一一映射的第二常规区域和第二大区域;其中,所述常规对象所占用的堆内存空间在阈值内,所述大对象所占用的堆内存空间超过阈值。
3.根据权利要求2所述的内存管理方法,其特征在于,所述在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置的步骤,包括:
在所述栈内存中选取所述第二大区域进行初始标记确定目标第二大区域;
对所述目标第二大区域对应的所述第一大区域进行并发标记确定目标第一大区域;
对所述目标第一大区域进行并发回收和并发重置;
判断所述堆内存的空间回收是否达到预定比例,并在达到所述预定比例的情况下确定所述全局内存垃圾回收完成。
4.根据权利要求3所述的内存管理方法,其特征在于,在确定所述堆内存的空间回收未达到所述预定比例的情况下,所述在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的第一子区域进行并发回收和并发重置的步骤,还包括:
在所述栈内存中选取预设数量的所述第二常规区域进行初始标记确定目标第二常规区域;
对所述目标第二常规区域对应的所述第一常规区域进行并发标记确定目标第一常规区域;
对所述目标第一常规区域进行并发回收和并发重置。
5.根据权利要求3所述的内存管理方法,其特征在于,所述对所述目标第二大区域对应的所述第一大区域进行并发标记确定目标第一大区域的步骤,包括:
将所述目标第一大区域设置为只读状态;
在对所述目标第一大区域进行并发回收和并发重置的步骤之后,所述内存管理方法的步骤还包括:
将所述目标第一大区域设置为可读写状态。
6.根据权利要求1所述的内存管理方法,其特征在于,所述对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置的步骤,包括:
对所述目标第二子区域对应的所述第一子区域执行回收价值度排序,由所述回收价值度从高到低的顺序来进行并发回收。
7.一种Java虚拟机的内存管理装置,其特征在于,所述内存管理装置包括:
划分模块,用于在堆内存中划分多个第一子区域,在栈内存中划分多个第二子区域,每个所述第二子区域与一个所述第一子区域一一映射;
处理模块,用于在触发全局内存垃圾回收的情况下,在所述栈内存中选取部分的所述第二子区域进行初始标记确定目标第二子区域,并对所述目标第二子区域对应的所述第一子区域进行并发回收和并发重置。
8.根据权利要求7所述的内存管理装置,其特征在于,所述第一子区域包括第一常规区域和第一大区域,所述第一常规区域用于存储常规对象,所述第一大区域用于存储大对象,所述第二子区域包括与所述第一常规区域和所述第一大区域一一映射的第二常规区域和第二大区域;其中,所述常规对象所占用的堆内存空间在阈值内,所述大对象所占用的堆内存空间超过阈值。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序以实现如权利要求1至6中任一项所述的内存管理方法。
10.一种存储介质,其特征在于,所述存储介质上存储有程序指令,所述程序指令用于执行权利要求1至6中任一项所述的内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310167271.5A CN116107702B (zh) | 2023-02-17 | 2023-02-17 | 内存管理方法、内存管理装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310167271.5A CN116107702B (zh) | 2023-02-17 | 2023-02-17 | 内存管理方法、内存管理装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116107702A CN116107702A (zh) | 2023-05-12 |
CN116107702B true CN116107702B (zh) | 2025-01-10 |
Family
ID=86254258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310167271.5A Active CN116107702B (zh) | 2023-02-17 | 2023-02-17 | 内存管理方法、内存管理装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107702B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108459898A (zh) * | 2017-02-20 | 2018-08-28 | 阿里巴巴集团控股有限公司 | 一种资源回收方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236603B (zh) * | 2010-04-29 | 2014-12-17 | 国际商业机器公司 | 虚拟化环境中垃圾回收的方法和系统 |
CN106294189B (zh) * | 2015-05-25 | 2020-09-25 | 中兴通讯股份有限公司 | 内存碎片整理方法及装置 |
CN109669759A (zh) * | 2018-09-25 | 2019-04-23 | 深圳壹账通智能科技有限公司 | Java虚拟机的垃圾回收方法、装置、设备和存储介质 |
CN113448722B (zh) * | 2020-03-28 | 2024-11-29 | 阿里巴巴集团控股有限公司 | 进程内存的映射方法和基于无服务器架构的实例处理方法 |
CN113849339B (zh) * | 2020-06-28 | 2023-07-11 | 华为技术有限公司 | 恢复应用程序的运行状态的方法、装置及存储介质 |
-
2023
- 2023-02-17 CN CN202310167271.5A patent/CN116107702B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108459898A (zh) * | 2017-02-20 | 2018-08-28 | 阿里巴巴集团控股有限公司 | 一种资源回收方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116107702A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6862674B2 (en) | Methods and apparatus for performing a memory management technique | |
EP3388946B1 (en) | Memory collection method and device | |
US8959512B2 (en) | System and method to improve memory usage in virtual machines running as hypervisor guests | |
CN1096642C (zh) | 高效利用空间的对象加锁的系统和方法 | |
US7024436B2 (en) | Computer system with two heaps in contiguous storage | |
CN108459898B (zh) | 一种资源回收方法及装置 | |
US20100031270A1 (en) | Heap manager for a multitasking virtual machine | |
US20090307292A1 (en) | Dynamically changing a garbage collector in a managed runtime system | |
US20180276120A1 (en) | Manual memory management using lazy patching | |
US8805896B2 (en) | System and method for use with garbage collected languages for enabling the allocated heap memory to be updated at runtime | |
US20060253498A1 (en) | Method and apparatus for reclaiming memory from a heap | |
US20060074988A1 (en) | Garbage collection system | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN102521143A (zh) | 一种堆数据处理方法及装置 | |
CN116107702B (zh) | 内存管理方法、内存管理装置、电子设备及存储介质 | |
US8990532B2 (en) | Method of managing memory in computer system, computer system and memory managing program | |
WO2017185263A1 (zh) | 一种内存回收方法及装置 | |
WO2024222605A1 (zh) | 内存管理方法、装置、电子设备及可读存储介质 | |
WO2010070529A2 (en) | A method, apparatus and computer program for moving data in memory | |
CN115080221B (zh) | 一种内存资源使用控制方法、装置、设备及存储介质 | |
CN113419678B (zh) | 一种用于嵌入式系统的存储管理方法 | |
CN115729708A (zh) | 实现高效率数据处理的动态内存调度方法、装置及设备 | |
US7644114B2 (en) | System and method for managing memory | |
CN115729702A (zh) | 应用程序内存配置方法、电子设备、计算机存储介质 | |
CN115934276A (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 |