在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
TLAB线程本地分配缓存区是什么?工作原理分析,TLAB全称Thread Local Allocation Buffer,即线程本地分配缓存区,是一个线程专用的内存分配区域。在线程初始化时,虚拟机会为每个线程分配一块TLAB空间,只给当前线程使用。

TLAB是虚拟机在堆内存的eden划分出来的一块专用空间线程专属。在虚拟机的TLAB功能启动的情况下,在线程初始化时,虚拟机会为每个线程分配一块TLAB空间,只给当前线程使用,这样每个线程都单独拥有一个空间,如需要分配内存,在自己的空间上分配,在不存在竞争的情况大大提升分配效率。
上面描述中"线程专属"、"只给当前线程使用"、"每个线程单独拥有"的描述怎么理解呢?因TLAB技术,堆内存并不是完完全全的线程共享,其eden区域中还是有一部分空间是分配给线程独享的。TLAB是线程独享的,但只在“分配”这个动作上是线程独享,在读取、垃圾回收等动作上是线程共享,且在使用上也没有什么区别。

每个线程在初始化时都会去堆内存中申请一块TLAB,并不是说这个TLAB区域的内存其他线程就完全无法访问,其他线程读取也可以,只不过无法在这个区域中分配内存而已。在TLAB分配之后不影响对象的移动和回收。虽然对象刚开始可能通过TLAB分配内存,存放在Eden区,但是还是会被垃圾回收或者被移到Survivor Space、Old Gen等。
TLAB是在eden区分配,eden区域本身就不太大,TLAB空间的内存也非常小,默认情况下仅占有整个Eden空间的1%,存在一些大对象是无法在TLAB直接分配。TLAB中无法分配的大对象,对象还是可能在eden区或者老年代等进行分配的,但这种分配就需要进行同步控制,这也是大家经常说的小的对象比大的对象分配起来更加高效。
如果设置了虚拟机参数 -XX:UseTLAB,在线程初始化时,同时也会申请一块指定大小的内存,只给当前线程使用,这样每个线程都单独拥有一个空间,如果需要分配内存,就在自己的空间上分配就不存在竞争还可以大大提升分配效率。
TLAB空间的内存非常小,缺省情况下仅占有整个Eden空间的1%,也可以通过选项-XX:TLABWasteTargetPercent设置TLAB空间所占用Eden空间的百分比大小。TLAB的本质其实是三个指针管理的区域:start,top 和 end,每个线程都会从Eden分配一块空间,例如说100KB,作为自己的TLAB,其中 start 和 end 是占位用的,标识出 eden 里被这个 TLAB 所管理的区域,卡住eden里的一块空间不让其它线程来这里分配。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Overload 和 Override 的区别,Overloaded 改变返回值的类型?
Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?Overload 是重载的意思,Override 是覆盖的意思,也就是重写。重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
12231
2019-04-17 16:37:29
Java程序员面试题:类的加载过程是什么
未来给博学谷学员提供更多的就业辅导以及学习资料,小编整理了大量关于Java程序员面试的题目。及时你现在还没有换工作的打算,也可以通过面试题了解目前企业注重的内容从而查漏补缺,为未来“跳槽”做好准备。本期分享的Java程序员面试题是:类的加载过程。
8387
2019-06-19 17:53:33
从0开始学Java开发要做哪些准备?
很多从0开始学Java开发的初学者,常常在面对一大堆基础语法知识的时候,感到无从下手。其实这也是很正常的现象,毕竟编程的学习门槛虽然很低,但是学起来并不轻松,想要学好更是难上加难。那么,我们应该在学习之前做哪些准备呢?换句话说,作为零基础的初学者,我们应该如何开始Java开发的学习呢?
6793
2020-08-03 11:47:20
女生学Java好就业吗?适合编程吗?
女生学Java好就业吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练都可能成为一名优秀的Java开发工程师,女生的实力也是不容置疑的,且女生学Java还具备一定的优势。
7332
2021-02-03 15:58:09
关于Java,你想知道的一切,这里说透了
这里是回车课堂--Java通识课三,在一和二咱们聊了【编程思维】,毕业后【我的职业选择-Java】,希望能够给处在“慌”金时代的你一丝启发。聊过之后如果你也有意从事 Java 编程事业的话,可能就会比较关心实际的问题了。
6422
2021-08-12 18:13:02
