“使用固定的对象池重用对象,取代单独地分配和释放对象,以此来达到提升性能和优化内存使用的目的。”
减少内存碎片化。
缩短构造对象造成的时间开销。
一定程度可减少内存泄漏风险,以及运行时空间大小不可预知。
定义一个保持着可重用对象集合的对象池类。其中的每个对象支持对其“使用(in use)”状态的访问,以确定这一对象目前是否“存活(alive)”。在对象池初始化时,它预先创建整个对象的集合(通常为一块连续堆区域),并将它们都置为“未使用(not in use)”状态。
当你想要创建一个新对象时就向对象池请求。它将搜索到一个可用的对象,将其初始化为“使用中(in use)”状态并返回给你。当该对象不再被使用时,它将被置回“未使用(not in use)”状态。使用该方法,对象便可以在无需进行内存或其他资源分配的情况下进行任意的创建和销毁。
当你需要频繁地创建和销毁对象时
对象的大小一致时
在堆上进行对象内存分配较慢或者会产生内存碎片时
每个对象封装着获取代价昂贵且可重用的资源,如数据库、网络的连接
对象池可能在闲置的对象上浪费内存
任意时刻处于存货状态的对象数目恒定
每个对象的内存大小是固定的
重用对象不会被自动清理,自己去定义Reuse方法自己去处理
未使用的对象将占内存
就不在这贴了,对象池随便问下ChatGPT或者项目中可能到处都是样例。
C++里面可以用模板等特性,写成通用的数据结构,而且还可以写基于共享内存的对象池, 在游戏服务器C++开发里很常见。