有这篇文章就够了——JVM TLAB 分析(五)

开课吧开课吧锤锤2021-04-21 09:50

点赞
有用
分享分享

    Java编程语言是一种简单、面向对象、分布式、解释型、健壮安全、与系统无关、可移植、高性能、多线程和动态的语言。如今Java已经广泛应用于各个领域的编程开发。

Java

    7.TLAB相关的JVM参数

    这里仅仅是列出来,并附上简介,看不懂没关系,之后会有详细分析,帮助你理解每一个参数。等你理解后,这个小章节就是你的工具书啦~~以下参数以及默认值基于OpenJDK17

    7.1.TLABStats(已过期)

    从Java12开始已过期,目前已经没有相关的逻辑了。之前是用于TLAB统计数据从而更好地伸缩TLAB但是性能消耗相对较大,但是现在主要通过EMA计算了。

    7.2.UseTLAB

    说明:是否启用TLAB,默认是启用的。

    默认:true

    举例:如果想关闭:-XX:-UseTLAB

    7.3.ZeroTLAB

    说明:是否将新创建的TLAB内的所有字节归零。我们创建一个类的时候,类的field是有默认值的,例如boolean是false,int是0等等,实现的方式就是对分配好的内存空间赋0。设置ZeroTLAB为true代表在TLAB申请好的时候就赋0,否则会在分配对象并初始化的时候赋0.讲道理,由于TLAB分配的时候会涉及到AllocationPrefetch优化CPU缓存,在TLAB分配好之后立刻更新赋0对于CPU缓存应该是更友好的,并且,如果TLAB没有用满,填充的dummyobject其实依然是0数组,相当于大部分不用改。这么看来,开启应该更好。但是ZeroTLAB默认还是不开启的。

    默认:false

    举例:-XX:+ZeroTLAB

    7.4.ResizeTLAB

    说明:TLAB是否是可变的,默认为是,也就是会根据线程历史分配数据相关EMA计算出每次期望TLAB大小并以这个大小为准申请TLAB。

    默认:true

    举例:如果想关闭:-XX:-ResizeTLAB

    7.5.TLABSize

    说明:初始TLAB大小。单位是字节

    默认:0,0就是不主动设置TLAB初始大小,而是通过JVM自己计算每一个线程的初始大小

    举例:-XX:TLABSize=65536

    以上内容由开课吧老师干货满满张哈希提供,更多Java教程尽在开课吧广场Java教程频道。

有用
分享