金三银四面试题(五):JVM之TLAB-为什么需要TLAB

时间:2024-03-31 18:39:55

简单的讲,每当使用new关键字创建新对象,JVM 都必须为堆上的新对象留出一些内存。在单线程的情况下,这很没什么问题,因为每次只能发生一个内存分配请求,因此线程可以简单地获取下一个合适大小的块,之后线性的执行后续new请求。然而在多线程的情况下,则存在两个线程将在同一时间请求分配内存并且都将被指定到完全相同的地址的风险。但如果将分配内存变成单线程,又会使得程序出现性能瓶颈。

所以不如为每个线程保留一块堆内存区域,这块内存仅由该线程用于分配内存。通过这种方式工作,不需要同步,因为只有一个线程可以从此缓冲区中拉取。缓冲区本身以同步方式分配,但这个操作不太频繁不会造成性能瓶颈。