在线客服
扫描二维码
下载博学谷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里的一块空间不让其它线程来这里分配。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
菜鸟自学软件编程入门?基础理论书籍推荐
菜鸟自学软件编程入门?基础理论书籍推荐,对于自学软件编程入门学习者来说是十分有必要的。这是因为大家在学习初期,往往对软件编程缺乏相关知识的了解,不知道从哪里入手比较好。看完基础理论书籍,对学习内容有了一定理解、梳理后才好制定一份适合自己的学习大纲。小编将为大家推荐十本软件编程入门基础理论书籍,希望可以给大家借鉴。
7124
2020-01-11 10:03:36
Java 基础语法之数据类型学习笔记
众所周知,Java 是一个强类型语言,Java 中的数据必须明确数据类型。本文将和大家一起来梳理一下数据类型的相关学习笔记,主要有两种数据类型,即基本数据类型和引用数据类型。还包括了类型转化的相关知识点,有学习需要的小伙伴一起来看看吧!
5089
2020-05-15 11:00:47
Java学习注意哪些问题?学习少踩坑
Java学习注意哪些问题?学习少踩坑,很多人学习JAVA时都会遇到很多问题,但是这些问题大多数是因为自身的原因导致的,我们一起来看看学习JAVA的“三不要”。
4518
2020-06-17 14:58:25
Java基础面试题和答案整理
为了帮助大家可以更好地做好面试前的准备,本文为大家整理了Java基础面试题和答案。这些问题都是比较经典的面试题,大家可以先不看答案做一做,查漏补缺。
4860
2020-07-01 14:33:38
Java架构师应具备的职业技能有哪些?
Java架构师应具备的职业技能有哪些? 在互联网开发领域架构师可以分为业务架构师、中间件架构师、系统架构师。如何区分三者的区别方法很简单,可以去招聘网站看看,了解架构师相关的招聘需求是什么样的。
3263
2022-04-27 11:26:56