当前位置: 首页 > article >正文

【jvm】什么是TLAB

目录

          • 1. 说明
          • 2. TLAB的作用
            • 2.1 提高对象分配性能
            • 2.2 减少线程竞争
            • 2.3 降低内存分配开销
          • 3. TLAB的生命周期
            • 3.1 创建与初始化
            • 3.2 使用与再填充
            • 3.3 释放与回收
          • 4. TLAB的配置与优化

1. 说明
  • 1.TLAB即Thread Local Allocation Buffer,是Java虚拟机中的一种内存区域,全称为线程本地分配缓存区。
  • 2.是JVM为每个线程分配的一个私有的、固定大小的内存区域。
  • 3.用于存储线程私有的对象实例和本地数据。
  • 4.TLAB的主要目的是提高对象分配的性能,减少线程之间的竞争,以及降低内存分配的开销。
2. TLAB的作用
2.1 提高对象分配性能
  • 1.在传统的JVM内存分配方式中,多个线程在分配对象时需要竞争同一个全局的分配锁,会导致性能瓶颈。
  • 2.TLAB则为每个线程分配一个私有的内存区域,使得线程在分配对象时不再需要竞争全局锁,而是在自己的TLAB中进行分配,提高了对象分配的效率。
2.2 减少线程竞争
  • 1.由于TLAB是线程私有的,因此多个线程在分配对象时不会互相干扰,减少了线程之间的竞争,提高了系统的并发性能。
2.3 降低内存分配开销
  • 1.使用TLAB可以减少全局分配锁的开销,因为线程在TLAB中分配对象时不需要获取全局锁。
  • 2.由于TLAB的大小是固定的,因此JVM可以更高效地管理内存,降低了内存分配的开销。
3. TLAB的生命周期
3.1 创建与初始化
  • 1.当线程被创建时,如果JVM启动了TLAB(默认是开启的),则会为该线程创建并初始化TLAB。
  • 2.在GC扫描对象后,线程第一次尝试分配对象时,也会创建并初始化TLAB。
3.2 使用与再填充
  • 1.线程在分配对象时,会优先在自己的TLAB中进行分配。
  • 2.当TLAB被用完或接近于满时,线程会尝试再填充TLAB,即从堆中申请新的内存空间来扩展TLAB。
  • 3.如果无法再填充(例如堆内存不足),则线程会竞争全局分配锁,在堆中直接分配对象。
3.3 释放与回收
  • 1.在GC扫描对象时,TLAB会释放回Eden区。
  • 2.TLAB的生命周期期望只存在于一个GC扫描周期内。
  • 3.如果TLAB中的对象在GC过程中仍然存活,它们会被复制到其他内存区域(如Survivor幸存者区或老年代),而TLAB本身则会被回收。
4. TLAB的配置与优化
  • 1.启用与禁用TLAB:可以通过JVM参数 -XX:+UseTLAB 来启用TLAB,通过 -XX:-UseTLAB 来禁用TLAB。默认情况下,JVM是启用TLAB的。
  • 2.设置TLAB大小:可以通过JVM参数 -XX:TLABSize= 来设置TLAB的初始大小(以字节为单位)。如果没有指定TLAB大小,JVM会根据堆大小、线程数量等因素动态计算TLAB的大小。
  • 3.调整TLAB相关参数:JVM还提供了其他与TLAB相关的参数,如 -XX:MinTLABSize= (设置最小TLAB大小)、
    -XX:TLABWasteTargetPercent=(设置TLAB浪费占用Eden的百分比)等,这些参数可以帮助用户进一步优化TLAB的性能。

http://www.kler.cn/a/371555.html

相关文章:

  • 【HTML】——VS Code 基本使用入门和常见操作,新手小白也能看懂
  • ElementUI el-table 多选以及点击某一行的任意位置就勾选上
  • linux 查看磁盘和内存的使用情况
  • Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(四)GetImageWrapperByExtention
  • static、 静态导入、成员变量的初始化、单例模式、final 常量(Content)、嵌套类、局部类、抽象类、接口、Lambda、方法引用
  • ubuntu开机自动以普通用户启用一个程序
  • Ubuntu 22.04系统启动时自动运行ROS2节点
  • 【机器学习】Softmax 函数
  • GraphQL系列 - 第1讲 GraphQL语法入门
  • 计算机毕业设计——ssm基于HTML5的互动游戏新闻网站的设计与实现录像演示2021
  • R_机器学习——常用函数方法汇总
  • Java进阶篇设计模式之四 -----适配器模式和桥接模式
  • 会议录音转文字怎么转?有这6款视频语音转文字工具就够了!
  • 微信小程序时间弹窗——年月日时分
  • G2 基于生成对抗网络(GAN)人脸图像生成
  • Pytorch学习--神经网络--非线性激活
  • 【Unity基础】初识UI Toolkit - 运行时UI
  • 【项目复现】——DDoS-SDN Detection Project
  • Nginx + Lua + Redis:打造智能 IP 黑名单系统
  • 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
  • Conditional DETR论文笔记
  • Java基础(4)之正则,异常与文件IO流
  • KAN原作论文github阅读(readme)
  • 深度解读GaussDB逻辑解码技术原理
  • 使用 OpenCV 进行人眼检测
  • springboot天气预报推送小程序-计算机毕业设计源码41533