【原创】简单解释一下,什么叫TLAB

【Deerhang】

  • TLAB是全程Thread Local Allocation Buffer,中文大致的含义是:线程私有内存分配区。它存在的意义是提高线程在JVM堆上创建对象的效率。那么它是如何做到的呢?

  • JVM的堆空间是线程共享的一块存储空间,用来存放对象信息。
    这里的Eden是新生代区域,old是老年代区域。每当创建一个对象的时候,会在Eden区域开辟一个空间用来存放对象信息。当多线程同时请求创建对象时,堆需要进行同步处理,导致性能下降,对象分配模型图如下:

  • 为了解决多线程同时创建对象产生的同步性能损耗,JVM提出了TLAB分配。TLAB指的是为每一个线程分配线程专有的堆内存操作空间,这样多个线程同时在堆上请求分配空间的时候,可以在私有内存空间中创建创建对象,减少了堆内存分配的同步等待。

  • TLAB所占的空间比较小,大概为整个Eden空间的1%,在上面的图中start -> end区域就是一个TLAB,这个空间是线程A的私有内存空间。线程A可以在这块内存中创建对象,内存区域剩余的空间为end - top,当新对象的占用空间 > (end - start)的时候,JVM为我们定义了一个refill_waste,refill_waste会根据程序的运行情况进行动态调整,根据这个值来决定接下来的处理方式:

    • 1、当新对象的占用空间 < refill_waste的时候,JVM会为当前线程分配一个新的TLAB,新对象在新的TLAB中进行创建。
    • 2、当新对象的占用空间 > refill_waste的时候,新对象会在Eden堆中创建。
  • 对象的分配创建流程:

posted @ 2021-04-10 23:34  鹿小虎  阅读(920)  评论(1)    收藏  举报