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

面试官:说说JVM的栈上分配、TLAB、PLAB有啥区别?

我们在学习 G1 回收器的时候一般我们都会接触到 TLAB 和 PLAB 这两个术语。它们都是为了提高内存分配效率而存在的但它们和栈上分配有什么区别呢今天就让树哥带着大家盘一盘。栈上分配稍微了解过 Java 虚拟机内存结构的同学都知道在 Java 虚拟机中有两个关键的存储数据节点那就是堆与栈。其中堆是所有线程共享的一块内存几乎所有对象的分配都在这块内存中。而栈则是线程自己私有的只存储线程自己的局部变量等信息。每个线程都有自己的栈栈信息无法在线程之间共享。一般情况下每个线程如果有新建的对象那么会跟 JVM 申请在堆上创建对应的对象而线程的栈则存储了指向堆对象的指针。每当一个线程想创建一个对象时首先会请求 JVM之后 JVM 进行协调创建完成之后再告诉线程线程最后将引用放到栈中。在对象创建的这个过程堆和栈之间的关系就像是列车的中央调度室和火车的关系。每次线程需要分配内存空间都需要去到堆去申请空间会耗费不少时间和精力。这个时候有人就发现线程的有些对象其实别人也不会访问到放在堆中貌似也没什么大作用。于是他提出对于这些其他线程不会访问的对象我们能不能让线程自己分配在它自己的栈空间上这样不就可以节省不少交互时间了么这个方法确实不错如果能实现应该可以提高对象创建的时间提高虚拟机的运行效率。但问题是我怎么知道哪些对象可以分配在栈上哪些不行呢其实聪明的软件工程师们早就解决了这个问题了他们新造了一个名字逃逸分析。那么什么是逃逸分析呢从字面意思上来讲逃逸分析的目的是判断对象的作用域是否有可能逃出函数体。例如下面的代码就显示了一个逃逸的对象private static User user; private static void hello(){ u new User(); u.name java.top.select; u.website http://www.shuyi.me; }对象实例 user 是类的成员变量可以被任何线程访问因此它属于逃逸对象。但如果我们将代码稍微改动一下该对象就可以线程非逃逸的了。private static void hello(){ User u new User(); u.name java.top.select; u.website http://www.shuyi.me; }可以看到 user 实例作用域只在 hello 函数中不会被其他线程访问到也不会访问。所以该 user 实例对象的作用域只在该函数中因此它并未发生逃逸。对于这样的情况虚拟机就有可能将其分配在栈上而不在堆上。看到这里我相信许多人都应该明白了什么是栈上分配了。简单点说就是将本来应该分配在堆中的对象让其分配在线程私有的栈上。通过这种方式减少垃圾回收的压力提高虚拟机的运行效率。TLABTLABThread Local Allocation Buffer即线程本地分配缓存。这是一块线程专用的内存分配区域TLAB 占用的是 eden 区的空间。在 TLAB 启用的情况下默认开启JVM 会为每一个线程分配一块 TLAB 区域。那么问什么需要 TLAB 呢这是为了加速对象的分配由于对象一般分配在堆上而堆事线程共用的因此可能会有多个线程在堆上申请空间而每一次的对象分配都必须线程同步这样会降低内存分配的效率。考虑到对象分配是非常常见的操作于是 JVM 使用 TLAB 这样的线程转悠区域来避免多线程冲突提高对象分配效率。为了不至于导致 Eden 区被填充满因此 TLAB 空间一般不会太大。因此大对象有可能无法在 TLAB 分配只能直接分配到堆上。这其实是一种折中的设计哲学因为大多数分配的对象都比较小因此 TLAB 空间能满足大多数的需求。PLABPLABPromotion Local Allocation Buffers即晋升本地分配缓存。PLAB 的作用于 TLAB 类似都是为了加速对象分配效率避免多线程竞争而诞生的。只不过 PLAB 是应用于对象晋升到 Survivor 区或老年代。与 TLAB 类似每个线程都有独立的 PLAB 区。对象内存分配流程对于栈上分配与 TLAB 而言其是有一定关系的。在进行对象内存分配的时候首先会尝试进行栈上分配接着尝试进行 TLAB 分配接着判断是否可以直接进入老年代最后不行的话再在 eden 区分配如下图所示。图片来自网络总结了解完栈上分配、TLAB、PLAB 之后我们基本上可以清晰地回答如下问题。什么是栈上分配它解决什么问题栈上分配指的是对象直接在线程栈帧中进行分配而不在堆中分配。它主要是为了解决多线程对象分配的低效问题通过在栈上分配内存避免了多线程之间的冲突提高了对象的分配效率。但要注意的是其只能分配较小对象并且该对象必须不被其他对象线程引用。什么是 TLAB它解决什么问题TLAB 指的是线程本地分配缓存其对应 Eden 区的某个区域但这块区域只可以被该线程使用。栈上分配和 TLAB 有啥区别TLAB 可以理解成是栈上分配的升级版本。栈上分配的对象只能被线程本身访问但 TLAB 的对象可以被其他对象读取但应该无法操作。通过 TLAB它解决了部分需要多线程访问的对象分配效率问题进一步提升了 JVM 的对象分配效率。什么是 PLAB它解决了什么问题PLAB 是为了在对象晋升到 Survivor 区或老年代的时候提升对象的分配效率。其优化思路与 TLAB 类似只是应用的地方不同。

相关文章:

面试官:说说JVM的栈上分配、TLAB、PLAB有啥区别?

我们在学习 G1 回收器的时候,一般我们都会接触到 TLAB 和 PLAB 这两个术语。它们都是为了提高内存分配效率而存在的,但它们和栈上分配有什么区别呢?今天,就让树哥带着大家盘一盘。栈上分配稍微了解过 Java 虚拟机内存结构的同学都…...

从RNN到Mamba:我的序列建模踩坑史与状态空间模型(SSM)入门指南

从RNN到Mamba:我的序列建模踩坑史与状态空间模型(SSM)入门指南 记得第一次接触序列建模是在2018年,当时为了完成一个股票价格预测项目,我整夜调试着那个总是梯度爆炸的LSTM模型。五年后的今天,当我用Mamba处理同样长度的时序数据时…...

消息队列学习计划 - 阶段三:面试高频问题

消息队列学习计划 - 阶段三:面试高频问题目标:准备所有 MQ 相关面试问题,覆盖基础到进阶,能应对字节/腾讯等大厂面试 预计周期:1 周,每天 1-2 小时(以记忆和模拟为主)面试问题分类类…...

阿里云专有云网络架构

一、 网络设备角色详解(基于阿里云飞天网络架构) 结合 v3.18.6r 版本特性,对图中各缩写设备进行标准化定义:设备缩写全称在单元Region中的核心职责1659台规模下的配置建议NCNode Controller物理服务器节点。包含计算节点&#xff…...

SwitchHosts实战指南:图形化界面下的Hosts文件高效管理技巧

1. 为什么你需要SwitchHosts来管理Hosts文件 每次调试网站或者切换测试环境时,手动修改Hosts文件就像用螺丝刀修电脑——既原始又低效。我见过不少同事因为手滑输错一个IP地址,导致整个下午都在排查"为什么网站打不开"。更糟的是,当…...

从LLM到VLM再到VLA:小白程序员必看的大模型学习路径(值得收藏!)

从LLM到VLM再到VLA:小白程序员必看的大模型学习路径(值得收藏!) 本文梳理了通用人工智能(AGI)的发展路径,从单模态大语言模型(LLM)演变为多模态视觉-语言模型&#xff08…...

2026奇点大会AIAgent控制框架深度拆解(ROS 3.0+LLM-Os融合架构首次公开,仅限首批参会者获取的SDK已泄露)

第一章:2026奇点智能技术大会:AIAgent机器人控制 2026奇点智能技术大会(https://ml-summit.org) 实时多模态指令解析架构 大会现场演示的AIAgent控制系统采用分层语义解耦设计,将自然语言指令(如“绕过障碍物,拾取红…...

【数据分析】【SQL】实战演练——从sqlzoo习题到业务场景(戴师兄风格)

1. 从sqlzoo习题到业务场景的思维转换 第一次接触sqlzoo平台时,我完全被它精巧的习题设计惊艳到了。这个平台把枯燥的SQL语法练习,包装成了探索世界数据库的冒险游戏。但真正让我开窍的,是后来在电商公司做数据分析时,突然发现那些…...

APP Inventor蓝牙APP制作:从零到一打造专属遥控器

1. 为什么选择APP Inventor制作蓝牙遥控器 最近在折腾一台自制的蓝牙小车,发现市面上的通用蓝牙调试工具根本不够用。要么功能太简单,要么界面丑得没法看。作为一个对用户体验有强迫症的人,我决定自己动手做一个专属遥控APP。经过一番调研&am…...

AI Agent岗位技术八股:高频问题与答案

这些实际上更像工程难题,公司愿意给30k月薪的原因就在这里,Agent研发不是玩具技能人,是能把玩具变成生产力的人。这环节最直接有效的策略就是跟着项目完整走一遍,如果你无从下手,趁着有大佬带队,你直接跟着…...

Topology:专业级网络拓扑图绘制与可视化解决方案

Topology:专业级网络拓扑图绘制与可视化解决方案 【免费下载链接】topology 项目地址: https://gitcode.com/gh_mirrors/top/topology 在当今复杂的网络环境中,清晰直观的网络拓扑图已成为网络工程师和运维人员不可或缺的助手。Topology作为一款…...

基于微信小程序的校园/体育馆预约系统,支持人脸识别签到+动态二维码,附前端+后端源码

获取方式:关注CSDN博客,私信回复「场馆预约」一、项目背景2026年,体育场馆、会议室、培训教室等线下场地的预约需求爆发式增长,但传统电话/线下登记方式存在信息不同步、时间冲突难排查、管理效率低三大痛点。本文手把手教你用Uni…...

抖音视频批量下载技术实战:douyin-downloader架构设计与应用指南

抖音视频批量下载技术实战:douyin-downloader架构设计与应用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fall…...

UE5跨平台开发实录:如何用Windows电脑给Linux玩家打包游戏?

UE5跨平台开发实战:Windows环境下为Linux平台打包的完整指南 当游戏开发团队需要同时面向Windows和Linux平台发布时,如何在Windows开发环境中高效完成Linux平台的打包工作?本文将深入探讨UE5(5.3.2版本)的跨平台编译全…...

解锁多光谱图像数据集:从入门到精通的实战指南

1. 多光谱图像数据集入门指南 第一次接触多光谱数据时,我被那些五颜六色的波段图搞得晕头转向。记得当时为了搞明白WorldView-3卫星的8个波段分别代表什么,整整花了两天时间查资料。现在回头看,其实掌握多光谱数据并没有想象中那么难&#xf…...

全球太阳辐射与风力数据资源全解析:从免费到付费的五大平台对比

1. 科学数据中心:免费但有限的基础选择 科学数据中心(https://www.casdc.cn/)是国内较为知名的科研数据共享平台,主要面向学术研究领域提供气象、环境等数据服务。实测下来,它的太阳辐射数据以CSV和NetCDF格式为主&…...

从理论到实践:傅里叶变换、DFT与FFT的数学原理与代码实现

1. 傅里叶变换:从物理现象到数学表达 第一次接触傅里叶变换时,我盯着那堆积分符号看了整整一个下午。直到某天深夜调试音频处理程序时突然顿悟:原来它就像音乐的"成分分析仪"。想象你面前有杯混合果汁,傅里叶变换能告诉…...

建议收藏:机器学习与深度学习的区别是什么?如何选择研究方向?

建议收藏:机器学习与深度学习的区别是什么?如何选择研究方向? 标签:#机器学习、#深度学习、#人工智能、#计算机视觉、#自然语言处理、#数据分析、#ai ### 一、企业招聘角度拆解:机器学习 vs 深度学习,岗位…...

jmeter进行数据库读取预处理转换数组传入

Groovy 脚本实现import groovy.json.JsonOutput// 定义一个通用的转换函数:将 JDBC 变量转为数字列表 def convertJdbcToList { prefix ->def count vars.get(prefix "_#")if (count null || count.toInteger() 0) return []int n count.toInteg…...

揭秘AI Agent:不只是ChatGPT,还能自主干活的AI神器!

AI Agent是一种有目标、会思考、能自主调用工具完成任务的AI。它区别于大语言模型聊天助手,具备记忆、自主规划和行动能力。Agent类型多样,如编程、个人助理、内容生成和通用类型等。运行模式主要包括ReAct(思考行动)和Plan-and-E…...

程序员转行大模型开发:高薪风口!4大方向+90天学习路线助你月薪30K+

程序员转行到大模型开发领域,可以根据个人兴趣和职业规划选择不同的方向。以下是几个推荐的方向、推荐原因以及学习路线:1. 自然语言处理(NLP)工程师 推荐原因: NLP是AI大模型应用最广泛的领域之一,随着聊天…...

大模型 vs Agent:揭秘AI灵魂与躯体的关系,你真的懂AI吗?

文章深入解析了大模型与Agent的区别,将大模型比作“底层脑组织”,而Agent则是被塑造成特定“角色”的脑子。文章用演员与角色的比喻,阐述了同一模型可扮演不同角色。并提出了Agent的能力方程式:模型身份定义(Prompt)长期记忆(Memo…...

后端开发者的新战场:Java程序员逆袭之路,大模型开发入门指南,月薪30K+不是梦!

本文为Java程序员提供了一份详尽的大模型开发转行指南。首先介绍了大模型的概念,接着逐步引导读者学习机器学习、深度学习的基础知识,掌握TensorFlow、PyTorch等工具和框架,并提升编程和数学能力。文章强调了Java程序员在软件架构和开发流程上…...

三十五岁零基础转行成为AI大模型开发者怎么样呢?转行ai大模型

以下从3个方面帮大家分析: 35岁转行会不会太晚?零基础学习AI大模型开发能不能学会?AI大模型开发行业前景如何,学完后能不能找到好工作? 一、35岁转行会不会太晚? 35岁正处于人生的黄金时期,拥有…...

一场源码泄露事故,验证了怎样的架构设计?

本文章节选自黄佳老师的《Claude Code 工程化实战》专栏,欢迎同学们去课程中围观全文。 你好,我是黄佳。 2026年 3 月 31 日,有人发现 anthropic-ai/claude-code 的 v2.1.88 npm 包中包含了一个不该出现的文件——cli.js.map。这是一份 sour…...

【AI知识点】交叉注意力机制:从原理到实战,打通多模态信息交互的桥梁

1. 从图文问答看交叉注意力机制的魅力 想象一下这样的场景:你给AI系统展示一张照片,照片里是一只橘猫趴在键盘上睡觉,然后问它"这只猫在做什么?"。要让AI准确回答"猫在键盘上睡觉",它需要同时理解…...

金融建模新思路:如何用连续时间随机游走(CTRW)预测股价波动?

金融建模新思路:如何用连续时间随机游走(CTRW)预测股价波动? 金融市场的高频波动常让传统模型失效。2023年美股"闪电暴跌"事件中,布朗运动模型预测偏差达47%,而采用CTRW框架的机构误差控制在12%以…...

Mac微信双开

Mac微信双开 在终端输入以下命令sudo cp -R /Applications/WeChat.app /Applications/WeChat2.app修改副本的Bundle Identifier 执行以下命令,将副本标识改为唯一值sudo /usr/libexec/PlistBuddy -c “Set :CFBundleIdentifier com.tencent.xinWeChat2” /Applicati…...

告别Transformer?手把手教你用xPatch搞定时间序列预测(附代码实战)

告别Transformer?手把手教你用xPatch搞定时间序列预测(附代码实战) 当Transformer在时间序列预测任务中遭遇性能瓶颈时,工程师们往往陷入两难:是继续优化这个"庞然大物",还是寻找更轻量高效的替代…...

AgentRun:当 Serverless 与 AI Agent 结合,如何颠覆传统的舆情分析模式

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...