LUR闲时卸载

本文介绍了游戏对象管理系统中避免内存膨胀的闲时卸载策略,主要探讨了LRU算法的实现和应用。通过使用双向链表和字典结构,实现了高效的LRU缓存淘汰机制,确保在O(1)的时间复杂度内进行操作。文章还提出了一种基于LRU的全局卸载队列管理方案,以协调各系统对象的卸载,减少内存占用。
摘要由CSDN通过智能技术生成

问题背景

游戏中存在较多对象管理系统,如常见的部队,道具,邮件等等。随着系统的增多,内存必然无序膨胀,为了避免内存膨胀,这些对象管理器都需要定期检查内存中是否闲置的对象数据是否可以卸载,因此实现一种通用且高效的闲时卸载组件就有比较高的应用价值。

那有什么方法可以卸载掉进程中闲置的对象呢?

首先想到的最笨的也是最快的方法大概是使用暴力遍历,即通过定时遍历全部存储对象,检测它的当前状态和最近使用时间,根据一定自定义策略卸载掉当前被判定为闲置的对象。但是如此,会存在许多问题:运行效率低,时间复杂度为O(n)。

解决方案

现在市面上有两种算法可以用来解决该问题:LRU和LFU。

LRU:网上的说法是,LRU基于一种假设:如果某个数据长期不被使用,在未来被用到的几率也不大;因此缓存容量达到上限时,应在写入新数据之前卸载最久未使用的数据,从而为新数据腾出空间,或者定时(10分钟)检测卸载符合闲置条件的对象。

LFU:LFU同样有这样的假设:如果一个数据在最近一段时间被访问到的频率很低,那么可以认为在将来它被访问的可能性也很小。因此,当空间满时,最小频率访问的数据最先被卸载;当存在多个键具有相同的使用频次时,则淘汰最久未使用的数据。

LFU和LRU类似,LFU主要在意访问频率,LRU主要在意最近的访问时间,实现上来说LFU会比LRU复杂一些,但是这也是LRU的优点,维护比较容易,且适合游戏的使用场景。比如说,玩家可能在某个时间段上线活跃,之后下线长时间不活跃。

LRU实现方

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值