内存垃圾的回收方法、装置、电子设备和存储介质制造方法及图纸

技术编号:37670296 阅读:19 留言:0更新日期:2023-05-26 04:31
本发明专利技术提供了一种内存垃圾的回收方法、装置、电子设备和存储介质;其中,该方法包括:响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取互斥锁的主线程对上一帧收集的内存垃圾进行清除,互斥锁用于独占线程;响应于当前帧的解释器执行完成,释放互斥锁,并确定解释器在当前帧的执行过程中是否触发垃圾回收;若解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集。该方法能够减少内存垃圾回收导致的应用程序运行卡顿现象。运行卡顿现象。运行卡顿现象。

【技术实现步骤摘要】
内存垃圾的回收方法、装置、电子设备和存储介质


[0001]本专利技术涉及内存垃圾回收
,尤其是涉及一种内存垃圾的回收方法、装置、电子设备和存储介质。

技术介绍

[0002]混合开发是常见的开发模式,混合开发是指同一应用程序中包含至少两种类型的开发语言,常见的是包含解释型的开发语言(如PHP/Python)和编译型的开发语言(如C/C++)。
[0003]在按帧运行的混合开发应用程序中,由于解释型语言自身的局限性,解释性语言开发的部分无法并行执行,使得现有的垃圾回收技术通常在主线程中进行内存垃圾回收,导致应用程序的运行出现卡顿现象。

技术实现思路

[0004]有鉴于此,本专利技术的目的在于提供一种内存垃圾的回收方法、装置、电子设备和存储介质,以减少内存垃圾回收导致的应用程序运行卡顿现象。
[0005]第一方面,本专利技术实施例提供了一种内存垃圾的回收方法,方法包括:响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程对上一帧收集的内存垃圾进行清除,所述互斥锁用于独占线程;响应于所述当前帧的解释器执行完成,释放所述互斥锁,并确定所述解释器在当前帧的执行过程中是否触发垃圾回收;若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集。
[0006]第二方面,本专利技术实施例提供了一种内存垃圾的回收装置,装置包括:清除模块,用于响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程对上一帧收集的内存垃圾进行清除,所述互斥锁用于独占线程;释放模块,用于响应于所述当前帧的解释器执行完成,释放所述互斥锁,并确定所述解释器在当前帧的执行过程中是否触发垃圾回收;收集模块,用于若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集。
[0007]第三方面,本专利技术实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述内存垃圾的回收方法。
[0008]第四方面,本专利技术实施例提供了一种机器可读存储介质,计算机可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述内存垃圾的回收方法。
[0009]本专利技术实施例带来了以下有益效果:
[0010]上述内存垃圾的回收方法、装置、电子设备和存储介质,响应于当前帧的解释器执
行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程对上一帧收集的内存垃圾进行清除,所述互斥锁用于独占线程;响应于所述当前帧的解释器执行完成,释放所述互斥锁,并确定所述解释器在当前帧的执行过程中是否触发垃圾回收;若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集。该方式中,为了避免在主线程中进行垃圾回收造成对应用程序运行速度的影响,将垃圾回收拆分为垃圾清除和垃圾收集,并且将快速的垃圾清除操作在主线程中执行,将需要较长时间执行的垃圾收集在异步线程中执行,使得解释器需要独占线程的情况下,在主线程释放互斥锁之后,也就是解释器执行完成之后,异步线程无需抢占主线程的互斥锁,即可锁定异步线程进行内存垃圾收集,从而避免互斥锁的抢占对应用程序运行速度产生负向影响,进而提高应用程序的运行效率,减少卡顿现象的发生。
[0011]本专利技术的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
[0012]为使本专利技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
[0013]为了更清楚地说明本专利技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0014]图1为本专利技术实施例中内存垃圾的回收方法的一个实施例流程图;
[0015]图2为本专利技术实施例中内存垃圾的回收方法的另一个实施例流程图;
[0016]图3为本专利技术实施例提供的一种内存垃圾的回收装置的示意图;
[0017]图4为本专利技术实施例提供的一种电子设备的示意图。
具体实施方式
[0018]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0019]本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0020]为便于理解,下面对本专利技术实施例的具体流程进行描述,请参阅图1,本专利技术实施
例中内存垃圾的回收方法的一个实施例包括:
[0021]步骤S10、响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取互斥锁的主线程对上一帧收集的内存垃圾进行清除,互斥锁用于独占线程;
[0022]需要说明的是,本专利技术实施例用于对按帧运行的应用程序进行内存垃圾清除,如按帧渲染的虚拟游戏程序、动画程序等,具体此处不做限定。在一种实施方式中,本专利技术实施例可以应用于混合开发的应用程序中,也可以应用于解释型语言开发的应用程序中,其中,混合开发的应用程序包括至少一种解释型语言开发的程序,如Python、PHP、JavaScript等,混合开发的应用程序还可以包括至少一种编译型语言开发的程序,如C语言、C++等,具体此处不做限定。
[0023]可以理解的是,在混合开发的应用程序中,解释器用于将解释型代码翻译为机器执行的字节码,编译器用于将编译型代码编译为机器执行的字节码。由于解释型语言具有开发便捷性和可跨平台等优点,而编译型语言具有运行高效性的优点,因此,混合开发模式能够结合二者的优点,实现开发和运行的高效结合。在混合开发的应用程序中,解释器用于运行混合开发应用程序中解释型语言开发的程序,而编译器则用于运行混合开发应用程序中编译型语言开发的程序。通常情本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存垃圾的回收方法,其特征在于,所述方法包括:响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程对上一帧收集的内存垃圾进行清除,所述互斥锁用于独占线程;响应于所述当前帧的解释器执行完成,释放所述互斥锁,并确定所述解释器在当前帧的执行过程中是否触发垃圾回收;若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集。2.根据权利要求1所述的方法,其特征在于,所述若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程对当前帧进行内存垃圾收集,包括:若所述解释器在当前帧的执行过程中触发垃圾回收,则通过异步线程获取所述互斥锁,并通过获取互斥锁的异步线程进行待判别对象遍历,得到待判别对象列表;确定所述待判别对象列表中的所有不可达对象,并将所述待判别对象列表中的所有不可达对象加入预设全局垃圾列表中,得到当前帧收集的内存垃圾。3.根据权利要求2所述的方法,其特征在于,所述确定所述待判别对象列表中的所有不可达对象,并将所述待判别对象列表中的所有不可达对象加入预设全局垃圾列表中,得到当前帧收集的内存垃圾,包括:对所述待判别对象列表中的所有待判别对象进行引用计数更新,得到每个待判别对象对应的引用计数信息;根据所有待判别对象分别对应的引用计数信息,确定所述待判别对象列表中的所有不可达对象;将所述待判别对象列表中的所有不可达对象加入预设全局垃圾列表中,得到当前帧收集的内存垃圾。4.根据权利要求2所述的方法,其特征在于,所述响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程对上一帧收集的内存垃圾进行清除,包括:响应于当前帧的解释器执行,通过主线程获取互斥锁,并通过获取所述互斥锁的主线程判断预设全局垃圾列表中是否包含至少一个不可达对象,所述预设全局垃圾列表包含上一帧收集的内存垃圾;若预设全局垃圾列表中包含至少一个不可达对象,则通过所述主线程删除所述预设全局垃圾列表中的所有对象数据。5.根据权利要求4所述的方法,其特征在于,所述若预设全局垃圾列表中包含至少一个不可达对象,则通过所述主线程删除所述预设全局垃圾列表中的所有对象数据,包括:若预设全局垃圾列表中包含至少一个不可达对象,则对所述预设全局垃圾列表中的所有对象数据进行析构操作,并在析构操作过程中,通过对象死亡回调函数对各对象数据进行弱引用注册;将弱引用注册成功的对象数据移出所述预设全局垃圾列表,得到移出后的预设全局垃圾列表,并删除所述移出后的预设全局垃圾列表中的所有对象数据。6.根据权利要求1所述的...

【专利技术属性】
技术研发人员:顾亦维
申请(专利权)人:网易杭州网络有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1