本申请涉及内存管理,具体涉及一种基于内存管理的对象创建方法、装置、设备及存储介质。
背景技术:
1、随着网络游戏的发展,游戏的功能越来越多,高性能的游戏服务器越发凸显重要,游戏里面有很多需要频繁创建和销毁的对象,例如,怪物,物品等,大量玩家击杀怪物掉落物品,那么就会频繁的触发创建怪物,销毁怪物,创建物品,销毁物品等操作。然而,创建对象需要向系统申请内存,系统找到一块没有被使用的并且足够大小的内存分配给这个对象,然后第一次访问调拨物理内存,销毁对象就释放掉这块内存,每次为一个待创建对象分配内存,均需要向操作系统或者下面一层的内存管理系统申请内存,然后再进行分配,频繁的申请和销毁对象,就需要频繁申请内存,导致内存分配效率比较低。而且,由于不同的对象所需要的内存大小存在差异化,频繁创建销毁之后有些内存会越来越小,导致产生内存碎片。
2、因此,在频繁创建和销毁对象的情况下,如何为对象分配内存,从而提高内存分配效率以及避免产生内存碎片,是目前亟待解决的技术问题。
技术实现思路
1、本申请实施例提供了一种基于内存管理的对象创建方法、装置、设备及存储介质,通过维护消息队列,以及为每种类型的对象预先分配堆空间,提高了内存分配效率,以及避免产生内存碎片。
2、第一方面,本申请实施例提供一种基于内存管理的对象创建方法,包括:
3、根据所述待创建对象的第一标识,确定第一消息队列中是否缓存有与所述第一标识对应的目标内存地址;其中,所述第一消息队列中缓存有地址列表,所述地址列表记录有历史对象的标识与内存地址之间的映射关系,且所述历史对象的内存地址对应的内存未释放,以及所述内存地址对应的内存是从与所述历史对象的类型对应的堆空间中申请,并分配给所述历史对象的;
4、若是,响应于所述内存分配请求,将所述目标内存地址对应的内存分配给所述待创建对象,以创建所述待创建对象;
5、若否,响应于所述内存分配请求,从与所述待创建对象的类型对应的堆空间中申请一块空闲内存,并将所述空闲内存分配给所述待创建对象,以创建所述待创建对象。
6、第二方面,本申请实施例提供一种基于内存管理的对象创建装置,所述装置包括获取单元和处理单元;
7、所述获取单元,用于获取待创建对象的内存分配请求;
8、所述处理单元,用于根据所述待创建对象的第一标识,确定第一消息队列中是否缓存有与所述第一标识对应的目标内存地址;其中,所述第一消息队列中缓存有地址列表,所述地址列表记录有历史对象的标识与内存地址之间的映射关系,且所述历史对象的内存地址对应的内存未释放,以及所述内存地址对应的内存是从与所述历史对象的类型对应的堆空间中申请,并分配给所述历史对象的;
9、若是,响应于所述内存分配请求,将所述目标内存地址对应的内存分配给所述待创建对象,以创建所述待创建对象;
10、若否,响应于所述内存分配请求,从与所述待创建对象的类型对应的堆空间中申请一块空闲内存,并将所述空闲内存分配给所述待创建对象,以创建所述待创建对象。
11、第三方面,本申请实施例提供一种电子设备,包括:处理器,所述处理器与存储器相连,所述存储器用于存储计算机程序,所述处理器用于执行所述存储器中存储的计算机程序,以使得所述电子设备执行如第一方面所述的方法。
12、第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序使得计算机执行如第一方面所述的方法。
13、第五方面,本申请实施例提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机可操作来使计算机执行如第一方面所述的方法。
14、实施本申请实施例,具有如下有益效果:
15、可以看出,在本申请实施例中,在创建对象时,先从第一消息队列中缓存的历史对象中,确定是否缓存有与该对象对应的内存;若是,则将该内存直接分配给该对象,无需重新分配内存,提高了内存分配效率;若否,则从与该待创建对象的类型对应的堆空间中申请空闲内存,分配该待创建对象。由于同类型的对象所需的内存大小是一样的或者相近的,为每种类型的对象创建对应堆空间后,在销毁这种类型的对象时,会将该类型的对象的内存返回到堆空间,不会立即返回给内存管理单元,因此,在创建新的一个对象时,则可以在这个堆空间中申请内存,将之前销毁的对象的内存分配给新增的对象,由于两者是类型相同的对象,两个对象所需内存是相同或者相近的,因此可以从该堆空间中为新创建的对象分配出适配的内存,不会出现内存不匹配的情况,从而实现在频繁创建和销毁对象的情况下,在进行多次内存分配后,不会产生内存碎片。此外,由于不同类型的对象的内存分配在各自对应的堆空间中,已经将不同类型的对象的内存进行隔离,那么若某类型的对象出现越界问题,可以直接定位到是该类型的对象出问题,快速定位出发生越界问题的对象的类型。
1.一种基于内存管理的对象创建方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,在从与所述待创建对象的类型对应的堆空间中申请一块空闲内存的情况下,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述根据所述最终的计数值,确定是否存在内存泄漏,包括:
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,所述获取所述待创建对象的销毁代价,包括:
6.根据权利要求1-3中任一项所述的方法,其特征在于,从与所述待创建对象的类型对应的堆空间中申请一块空闲内存之前,所述方法还包括:
7.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:
8.一种基于内存管理的对象创建装置,其特征在于,所述装置包括获取单元和处理单元;
9.一种电子设备,其特征在于,包括:处理器和存储器,所述处理器与所述存储器相连,所述存储器用于存储计算机程序,所述处理器用于执行所述存储器中存储的计算机程序,以使得所述电子设备执行如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1-7中任一项所述的方法。