概念
TLAB(Thread Local Allocation Buffer) 线程本地分配缓冲区 (线程私有分配区, 私有分配, 公共查看), 占用 Eden 区 (缺省 Eden 的 1%), 默认开启, JVM 会为每一个线程分配一块 TLAB 区域, 避免堆对象共享造成的多线程线程同步.
背景
优化多线程堆空间分配对象指针碰撞问题
局限性
TLAB 空间一般不会太大, 大对象直接进堆
TLAB 允许空间浪费, 导致 Eden 区不连续, 触发 GC
分配策略
一个 100KB 的 TLAB 区域, 如果已经使用了 80KB, 当需要分配 30KB 的对象时, 虚拟机有 2 种选择: 1. 废弃当前 TLAB 2. 将 30KB 对象分配到堆上, 保留当前 TLAB 给小于 20KB 的对象分配
开启命令
-XX: +UseTLAB (默认开启)
来源: http://www.bubuko.com/infodetail-3120007.html