tlab机制通过为每个线程分配独立的eden子区域实现无锁对象分配,仅需指针碰撞(bump-the-pointer)即可快速完成小对象创建,避免全局锁竞争与cas开销,显著提升分配效率;大对象或tlab不足时回退至慢速路径,兼顾性能与内存利用率。

TLAB 机制通过让每个线程拥有独立的内存分配“小隔间”,彻底避开多线程争抢同一块堆内存的同步开销,从而显著提升对象创建速度。
避免全局锁竞争
堆是所有线程共享的,如果没有 TLAB,每次 new 对象都要在 Eden 区找空闲位置——这需要加锁或 CAS 原子操作来保证线程安全。高并发下,大量线程排队等锁,分配变慢。TLAB 把 Eden 划出一个个线程私有的小区域(默认占 Eden 的 1%),线程只在自己的 TLAB 里 bump-the-pointer 分配,全程无锁。
使用指针碰撞实现快速分配
TLAB 内存是规整的,分配只需移动一个 top 指针,比如对象占 32 字节,top 就直接 +32。这种“挪指针”操作是 CPU 级别的原子指令,毫秒级都不到。相比全局空闲列表查找、CAS 重试、锁获取释放等开销,快一个数量级以上。
减少内存分配路径切换
TLAB 分配属于“快速分配路径”,失败才走“慢速分配路径”(加锁、查空闲列表、可能触发 GC)。只要 TLAB 够用,95% 以上的小对象都在快速路径完成。实践中,合理设置 TLAB 大小(如 -XX:TLABSize=128k)能让大多数线程长期复用同个 TLAB,避免频繁废弃和重申请。
兼顾大对象与内存利用率
TLAB 只负责小对象。超过 TLAB 剩余空间的对象,JVM 会直接在 Eden 或老年代分配(走慢速路径),不影响功能。同时,TLAB 过大会浪费 Eden 空间(比如线程只用 10KB 却占了 512KB),过小又导致频繁切换路径。可通过 -XX:TLABWasteTargetPercent 控制可容忍的浪费比例,平衡效率与内存。










