阿里面试官问我内存池Memory Pool是什么,以为我不知道,其实我都懂!
发布日期:2021-06-30 12:24:25
浏览次数:2
分类:技术文章
本文共 836 字,大约阅读时间需要 2 分钟。
在翻阅 Java 编程思想英文原版时,读到了 pool of memory一词,而 Java 的堆内容就属于内存池。
内存池(Memory Pool),又被称为固定大小区块规划(fixed-size-blocks allocation),允许程序员以类似 C语言 的 malloc 或是 C++ 的 new 操作数进行动态的存储器规划。对于其它动态存储器规划的实践来说,因为会变动存储器区块大小导致的碎片问题,导致在实时系统上受限于性能因此,根本无法使用。内存池提供了一个更有效率的解决方案:预先规划一定数量的存储器区块,使得整个程序可以在运行期规划 (allocate)、使用 (access)、归还 (free) 存储器区块。
一个简单的实践示例
这个简单的内存池实践模块在编译期规划 3 个示例内存池,其区块将大小针对程序的需求做最优化。这个程序可以下列接口来规划、使用及归还存储器区块:
- 从内存池中规划存储器区块。这个函数会先检测当前的内存池是否仍有足够空间可以规划所需的存储器区块,若空间已不足,将继续尝试下一个内存池。一个已规划的存储器区块将使用handle来表示
- 获取一个指向已规划存储器区块的指针
- 归还之前规划的存储器区块
- 用以代表存储器区块的handle,可以使用像是 unsigned int 的数据类型来实践。
内存池与 malloc 的比较
优点
内存池允许在运行期以常量时间规划存储器区块,并且不会有存储器破碎的情况产生。一次归还存储器中成千上万个对象的存储器区块只需要一个操作,无需像 malloc 一般需要个别 free。
内存池可以在层次结构式的树状结构中被分群,非常适合某些特定的程序结构,例如递归与迭代。 固定区块大小的内存池不需将每次规划的信息记录下来(例如规划的存储器区块大小,因为每次规划都是一样的)。针对一些小而多的存储器区块规划会节省一些空间。 缺点内存池模块在使用时,必须依照程序需求来做个别调整,才能保持时间与空间效率。
转载地址:https://javaedge.blog.csdn.net/article/details/105521030 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月21日 23时05分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL外键约束的参照操作
2019-04-30
文字过长显示省略号的一样简单解决方法,不用额外的其他框架
2019-04-30
Mysql 修改数据库,添加删除单列,添加删除多列,添加删除约束
2019-04-30
防止表单重复提交的一种方式
2019-04-30
Win10开机画圈圈没完没了?有这招绝对搞定
2019-04-30
Wi-Fi密码记不住怎么办?这条命令就搞定!
2019-04-30
layui日期时间段的设置,开始时间-结束时间
2019-04-30
被锁的U盘怎么抢救资料?
2019-04-30
Mysql的增删改查
2019-04-30
java.sql.SQLException: ORA-01810: 格式代码出现两次
2019-04-30
Linux中rz和sz命令
2019-04-30
ORA-01157 错误解决,原因DBWR锁定产生
2019-04-30
JFinal 表无主键的新增方法
2019-04-30
优秀的程序员和一般的程序员差别在哪
2019-04-30
使用Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图
2019-04-30
window系统桌面图标间距调整
2019-04-30
业务并发需求的实现
2019-04-30
tomcat SSL证书的配置
2019-04-30
Oracle时间戳(毫秒)转为Date
2019-04-30