What Is a TLAB or Thread-Local Allocation Buffer in Java? | Baeldung

1. 简介

在本教程中,我们将了解线程本地分配缓冲区 (TLAB)。我们将了解它们是什么、JVM 如何使用它们以及如何管理它们。

2. Java中的内存分配

Java 中的某些命令会分配内存。最明显的是 new 关键字,但还有其他命令 - 例如使用反射

每当我们执行此操作时,JVM 都必须为堆上的新对象留出一些内存具体来说,JVM 内存分配在 Eden 或 Young 空间中以这种方式进行所有分配。

在单线程应用程序中,这很容易。由于任何时候都只能发生一个内存分配请求,因此线程可以简单地获取下一个合适大小的块,然后我们就完成了:

Untitled

然而,在多线程应用程序中,我们不能这么简单地做。如果我们这样做,那么就存在两个线程同时请求内存并被分配到同一个块的风险:

Untitled

为了避免这种情况,我们同步内存分配,以便两个线程不能同时请求同一个内存块。但是,同步所有内存分配将使它们本质上是单线程的,这可能会成为我们应用程序的巨大瓶颈。