JVM中TLAB初认识

TLAB解读

单线程分配内存

单线程环境下JVM对于内存的分配是没有冲突的,目前有两种分配方式

  1. 指针碰撞(bump-the-pointer)

  2. 空闲列表

    1. 首先,在class文件被加载进JVM时,就可以在分配内存前计算出内存分配的大小。

    2. 如果采用指针碰撞的方式分配内存(下面我叫它撞针分配),由于可分配内存并不是连续的,会导致

      1.如果指针所在的那块内存剩下可分配内存满足要分配内存的大小,则可以在这块内存分配

      2.如果满足不了所有分配的内存大小,会导致指针频繁的找另一块内存去分配,造成Cpu执行效率不高,进而影响到内存分配的效率。(时间都花费在找可用内存上了)

所以可以使用空闲列表加上撞针分配的方式

具体的流程是:FreeList记录内存使用情况,并且释放的对象内存加入 FreeList,下次分配对象的时候,优先从 FreeList 中寻找合适的内存大小进行分配,之后再在合适的内存中撞针分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DP8IhNPM-1626016411992)(C:\Users\Administrator\Pictures\jvm\指针碰撞和空闲列表.png)]

但如果是多线程环境下呢?

我们可以考虑这样一种情况:

在多线程环境下,必须要保证分配内存的安全性&#x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值