前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题25:什么是TLAB?逃逸分析?标量替换?

面试题25:什么是TLAB?逃逸分析?标量替换?

作者头像
爪哇缪斯
发布2023-05-09 21:38:18
3600
发布2023-05-09 21:38:18
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

【TLAB】

  • TLAB的全称是Thread Local Allocation Buffer,即线程本地分配缓存区,这是一个线程专用的内存分配区域。
  • 由于对象一般会分配在堆上,而堆是全局共享的。因此在同一时间,可能会有多个线程在堆上申请空间。因此,每次对象分配都必须要进行同步(虚拟机采用CAS配上失败重试的方式保证更新操作的原子性),而在竞争激烈的场合分配的效率又会进一步下降。
  • JVM使用TLAB来避免多线程冲突,在给对象分配内存时,每个线程使用自己的TLAB,这样可以避免线程同步,提高了对象分配的效率。
  • TLAB本身占用Eden区空间,在开启TLAB的情况下,虚拟机会为每个Java线程分配一块TLAB空间
  • 参数-XX:+UseTLAB开启TLAB,默认是开启的。
  • TLAB空间的内存非常小,缺省情况下仅占有整个Eden空间的1%,当然可以通过选项-XX:TLABWasteTargetPercent设置TLAB空间所占用Eden空间的百分比大小。
  • 由于TLAB空间一般不会很大,因此大对象无法在TLAB上进行分配,总是会直接分配在堆上。TLAB空间由于比较小,因此很容易装满。
  • 示例:

【解释】

  • -XX:+UseTLAB

开启TLAB,默认为开启。

  • -XX:+PrintTLAB

打开TLAB跟踪参数

  • -Xcomp(这里只是希望在相对一致的环境中测试)

JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。启用对所有函数的JIT

  • -XX:-BackgroundCompilation (这里只是希望在相对一致的环境中测试)

禁止后台编译

  • -XX:-DoEscapeAnalysis

关闭逃逸分析

  • 什么是JIT?

在部分商用虚拟机中(如HotSpot),Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,下文统称JIT编译器)。


【逃逸分析】

  • 对于线程私有的对象,可以分配在栈上,⽽不是分配在堆上。好处是⽅法执⾏完,对象⾃⾏销毁,不需要gc介⼊。可以提⾼性能。
  • ⽽栈上分配的⼀个技术基础(如果关闭逃逸分析关闭标量替换,那么⽆法将对象分配在栈上)就是逃逸分析。
  • 逃逸分析的⽬的是判断对象的作⽤域是否有可能逃逸出函数体

如下所示:

代码语言:javascript
复制
Student student; // 属于逃逸了
public void say1() {
  student = new Student();
}

public void say2() {
  Student student = new Student(); // 没有逃逸
}

【注意】

  • 对于say2()⽅法中的new Student(),jvm就有可能将Student分配在栈上,⽽不是堆上。
  • 对于⼤量的零散⼩对象,栈上分配提供了⼀种很好的对象分配优化策略。
  • 对于⼤对象,⽆法也不适合在栈上分配。

【标量替换】

  • 标量

不可被进一步分解的量,——JAVA的基本数据类型就是标量(如:int,long等基本数据类型以及reference类型等)

  • 聚合量

标量的对立就是可以被进一步分解的量。——JAVA中对象就是可以被进一步分解的聚合量。

  • 替换过程

条件1> 通过逃逸分析确定该对象不会被外部访问。

条件2> 对象可以被进一步分解,即聚合量。

JVM不会创建该对象,而会将该对象成员变量分解若干个被这个方法使用的成员变量所代替

这些代替的成员变量在栈帧寄存器上分配空间。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档