TLAB(Thread Local Allocation Buffer)
2021-04-06 19:15:52 0 举报
登录查看完整内容
TLAB(Thread Local Allocation Buffer)
作者其他创作
大纲/内容
在多线程的情况下,会有多个线程同时申请内存,就会出现安全问题。场景:线程1和线程2同时申请空间
S1
堆内存
线程1申请了一块空间,指针还有没移动,但是时间片用完了
TLAB
解决这个问题可以使用CAS,或者加锁。但是CAS和加锁想能都比较低,所以设计了TLABTLAB结合指针碰撞实现了多线程下不加锁快速分配内存。TLAB在Eden园区,而且空间很小TLAB本质是三个指针管理的区域,start、top和end。start和end是占用位TLAB在指针碰撞后悔重新申请一个新的,旧的空间留在原地大对象的直接在Eden Space中创建
而线程2使用的是未移动位置的指针
堆
指针在的位置
start
指针应该在的位置
end
Eden Space
内存碰撞:假设内存是规整的,堆中的内存被一个指针一分为二,一边是满的,另一边是空的,每添加一个对象指针就移动一个对象大小的距离。
TLAB内存并非只有占有内存能访问,所有线程都可以访问TLAB,只是其他线程无法获取这个内存而已
S0
top
0 条评论
回复 删除
下一页