范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

面试官JVM的栈上分配TLABPLAB有啥区别?

  大家好,我是树哥。
  我们在学习 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 实例对象的作用域只在该函数中,因此它并未发生逃逸。对于这样的情况,虚拟机就有可能将其分配在栈上,而不在堆上。
  看到这里,我相信许多人都应该明白了什么是栈上分配了。 简单点说,就是将本来应该分配在堆中的对象,让其分配在线程私有的栈上。通过这种方式,减少垃圾回收的压力,提高虚拟机的运行效率。 TLAB
  TLAB(Thread Local Allocation Buffer),即线程本地分配缓存。这是一块线程专用的内存分配区域,TLAB 占用的是 eden 区的空间。在 TLAB 启用的情况下(默认开启),JVM 会为每一个线程分配一块 TLAB 区域。
  那么问什么需要 TLAB 呢?这是为了加速对象的分配!
  由于对象一般分配在堆上,而堆事线程共用的,因此可能会有多个线程在堆上申请空间,而每一次的对象分配都必须线程同步,这样会降低内存分配的效率。
  考虑到对象分配是非常常见的操作,于是 JVM 使用 TLAB 这样的线程转悠区域来避免多线程冲突,提高对象分配效率。
  为了不至于导致 Eden 区被填充满,因此 TLAB 空间一般不会太大。因此大对象有可能无法在 TLAB 分配,只能直接分配到堆上。这其实是一种折中的设计哲学,因为大多数分配的对象都比较小,因此 TLAB 空间能满足大多数的需求。 PLAB
  PLAB(Promotion 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 类似,只是应用的地方不同。 原文:https://mp.weixin.qq.com/s/K040nLk4ZG-aEZ31ONvejA
  作者:陈树义
  如果感觉本文对你有帮助,点赞关注支持一下

最新手机续航排名TOP5,国产骁龙8旗舰登顶,领先苹果40分钟这两年手机的续航下降了不少,核心原因是随着摩尔定律的推进,处理器性能越来越高,功耗也越来越高,这就导致原本已经发展到瓶颈的压力越来越大了。所以现在不少用户选择手机的时候都期望续航可如果看不惯一个人,请记住这四种回应方式01hr任何一份感情,都是双向奔赴的。你看不惯的人,大概率会看不惯你。投射效应说明,很多人习惯把自己的特点,归于别人身上。用自己的认知去衡量别人,甚至强加于别人。这是认知的障碍。低TCL科技半导体领域又有大动作近日,TCL科技在半导体领域又有大动作!7月29日,鑫芯半导体科技有限公司日前发生工商变更,公司注册资本由501亿增加至6513亿。新增股东TCL科技集团股份有限公司,持股2307这些京西打卡地不能错过!注入潮流与科技元素,沉浸式体验大不同北京建设国际消费中心城市一周年之际,京西商业拿得出手的项目逐渐增多。8月9日,北京商报记者走访获悉,海淀区商业新秀首创朗园BOM嘻番里依靠元宇宙玩法,吸引了不少北京潮流年轻客群华熙中美芯片大战,韩国左右为难芯片产业,已到紧要关头。2022年7月末,美国总统拜登宣布将在8月签署芯片法案。该法案包括520亿美元补助金与240亿美元的四年25税收抵免。美国意在通过这一法案补助美国半导体企业拜登今日正式签署芯片法案,半导体芯片为何如此重要拜登将于今日(8月9日)正式签署半导体联盟法案。这个法案签署的核心是通过给三星集团台积电等半导体大厂发补贴的形式,拉拢它们去美国建厂,把半导体产业的生产移到美国去同时限制这些大厂在火星样本备货完成,太空骑士准备接单近期科技趣评沧海遗珠,信手拈来图源pixabay。com01hr利用水和空气制造航空煤油图源IMDEAENERGY近日发表在Joule上的一篇论文中,研究人员使用一种新装置利用太阳能生产航空煤国家专精特新小巨人众诚科技北交所成功过会中国上市公司网文纵观人类文明的发展进程,人类先后经历了农业革命工业革命信息革命,每一次科技革命和产业都给生产力带来了质的飞跃。数字化发展已成为全球重要共识,面对百年未有之大变局,抓如果看不惯一个人,请记住这四种回应方式01hr任何一份感情,都是双向奔赴的。你看不惯的人,大概率会看不惯你。投射效应说明,很多人习惯把自己的特点,归于别人身上。用自己的认知去衡量别人,甚至强加于别人。这是认知的障碍。低TCL科技半导体领域又有大动作近日,TCL科技在半导体领域又有大动作!7月29日,鑫芯半导体科技有限公司日前发生工商变更,公司注册资本由501亿增加至6513亿。新增股东TCL科技集团股份有限公司,持股2307这些京西打卡地不能错过!注入潮流与科技元素,沉浸式体验大不同北京建设国际消费中心城市一周年之际,京西商业拿得出手的项目逐渐增多。8月9日,北京商报记者走访获悉,海淀区商业新秀首创朗园BOM嘻番里依靠元宇宙玩法,吸引了不少北京潮流年轻客群华熙
来,武汉各大景区看景赏雪木兰草原雪景。通讯员鲁明供图长江日报大武汉客户端1月15日讯(记者叶飞艳)武汉迎来今年初雪,一夜静悄悄遍撒雪花。1月15日,各大旅游景区银装素裹,如诗如画,成为雪中大片聚集地。木兰真正有出息的男人,往往有以下五个本事,希望你也有作者拾壹言01序言小王子里有这样一句话每一朵花,都有它自己的生命轨迹。人生,如同一场旅程,在这趟旅程中,我们会遇到很多人和事,也会遇到很多不一样的人。每个人都是独立存在的个体,都拥人到五十,逐渐退出同学群和亲戚群,那你多半是这3类人现实当中,我们经常遇到有人莫名其妙,退出同学群和亲戚群。这种人呢,多数人认为他们冷漠无情,一点情谊都不顾。还有人觉得他们孤僻,性子古怪。但其实,人过五十,退出同学群和亲戚群的人,多欲壑难填鲁迅先生说过,不满足是向上的车轮,是针对学习而言的,以此勉励要求进步的年轻人,得到更多的文化知识,意为学无止境,追求更美好的幸福生活有人,学到了这句话的精髓,在一味的享受别人的包容2023上半年再见!下半年请你加油!再加油人皆苦炎热,我爱夏日长。熏风自南来,殿阁生微凉。李昂柳公权不知不觉,六月已尽。七月至,2020整整半年就这么过去了。新冠疫情蝗灾火灾冰雹洪涝庚子鼠这半年,比哪一年都难,这人世间比想老实人的结局,早已注定什么是老实人?你是老实人吗?老实人的结局又会是如何?俗话说和老实人做朋友忠实可靠和老实人做夫妻,一辈子安心有老实人下属,任劳任怨。可事实真就是这样的吗?老实人一般性格软弱不善于表达强大易用好用的NAS绿联DX4600开箱评测及体验分享前言大家好,我是Karl,一个电脑数码爱好者,一个普通NAS用户,一个普通研究生。过去两年多的时间里,NAS给我的生活带来了诸多便利,我也写过很多文章和大家分享NAS的选购硬盘搭配用替换法升级MIUI14的小米11U使用体验怎么样,谈谈我的看法最近MIUI14的热度很火,而且体验过MIUI14的用户评价也大多是正向的,都说MIUI14的流畅性进步很大。可惜我的小米11Ultra是稳定版系统,要等稳定版推送还要很长时间。恰聊一款价格亲民的笔记本电脑马上就要过春节了,各位都回家了吗?笔吧评测室微信公众号在春节期间也会照常更新,Bilibili视频频道也会争取更新视频,无聊了记得来看看吧2023年1月是笔记本电脑的青黄不接期,最14寸轻薄本顶配RTX4070性能惊人!是智商税还是真硬核盘点目前市场端主打便携和办公场景的轻薄本,一颗主流低压cpu就满足了大部分需求。虽然近些年标压cpu搭配独显配置的出现也一定程度提高了轻薄本的性能门槛,但距离游戏性能还有相当一段距一看就懂的OpenGLES教程这或许是你遇过最难画的三角形(五)通过阅读本文,你将获得以下收获1。客户端程序使用uniform变量指定颜色值2。客户端程序使用顶点属性数组指定图形的渲染颜色3。OpenGLes光栅化的插值现象天青色等烟雨,而我在