前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内存分配管理之Largeobjectspace

内存分配管理之Largeobjectspace

作者头像
北洋
发布2022-05-06 15:36:32
6340
发布2022-05-06 15:36:32
举报
文章被收录于专栏:北洋csdn

什么是Largeobjectspace

该空间是专门针对所谓需要大内存对象的内存分配器

判定规则

1.如果分配一个对象的内存超出了某个值就会吧这个对象放到这块空间中,可以理解为针对大对象的分配单独创建了一个largeobjectspace空间进行分配内存。

2.对象的数据类型是有限制的:必须是基础类型的数组,或者是string类对象。

不同于其他分配算法。这个largeobjectspace的分配内存的方式是进行直接mmap映射一块操作系统的内存进行分配内存。一个对象对应的就是一块mmap的内存

其他分配算法

1。bumpspace通过指针碰撞来分配内存,由于他是一块内存连续的空间,所以进行这种分配算法效率最高,每次分配时维护一下当前该分配到哪块内存即可。这种常用于线程本地分配tlab使用。

这种回收内存会造成碎片化,因为内存分配是连续的但是回收的时候没有进行额外处理而是直接将那块内存回收掉,所以碎片化非常严重。

2。regonspace把内存分为一块regon,分配时按照regon进行分配。一块一块的regon,内存回收时是按照拷贝算法,回收时进行拷贝活着的对象,死亡对象进行清除。

3。后面art虚拟机采用了更复杂的内存分配算法和回收算法,也就是degleeote和allotec, 分配内存更加严格,slot代表内存分配基本单位,run是进行内存分配时用到的,可以理解为是管理slot内存的。 对run进行操作run内部在根据空闲的slot空间进行分配内存。 当run内部对slot没有空闲的时候,会进行加锁分配内存保证安全。

第四种就是Largeobjectspace了,针对大对象的分配。直接从操作系统mmap映射内存使用,直呼好家伙~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Largeobjectspace
  • 判定规则
  • 其他分配算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档