揭开JVM中TLAB中的神秘面纱

  • 首页
  • 首页
  • 最新资讯
  • 大平台官网
  • 让建站和SEO变得简单

    让不懂建站的用户快速建站,让会建站的提高建站效率!

    你的位置:大平台 > 最新资讯 > 揭开JVM中TLAB中的神秘面纱

    揭开JVM中TLAB中的神秘面纱

    发布日期:2022-05-15 15:02    点击次数:83

    本文转载自微信公众号「一个行径员的成长」,作家一个行径员的成长。转载本文请推敲一个行径员的成长公众号。

    在运转著述之前,我这里暂且合计民众还是显豁了JVM创建对象分派内存地址的经过,也流露JVM内存分袂。基于人文认识我如故放一张图吧,民众对照着看。

    JVM内存结构

    堆内存分袂结构

    堆区分派内存是否存在多线程安全问题?

    答:可能存在;

    new Object();

    上述操作咱们都流露它最终需要在堆内存中开拓一块内存空间,那么想这样一个问题,堆区是扫数线程分享的,那么在JVM等闲创建对象的时辰,并发情况下在堆内存中开拓空间是不是存在安全问题。

    那么为了管束这个问题咱们领先猜想的即是加锁,然则加锁存在一个问题,即是影响性能。

    TLAB出现(Thread Local Allocation Buffer)

    基于上头的问题,从而引出了TLAB,强行翻译一下即是线程土产货分派缓冲区,领先呢先看张图

    声明:在堆内存均分派空间,领先是在eden区进行分派,并不是告成分派在老年代,内存分派为止之后,没进行一次Yong GC,要是对象莫得被回收,那么他的存活次数就会 +1,要是这个次数达到15次,那么这个对象升迁到老年代。

    那么咱们流露了对象分派领先是在eden区进行的,那么也不难矫健上头的图,咱们在eden区域分袂出来一块区域,咱们称之为TLAB,每一个TLAB都是现成独到的,那么并发创建对象的时辰其实也就不需要进行加锁这样的操作了,这样现成安全问题就管束了。

    要是分派的这些TLAB空间被使用结束梗概对象所需要额内存空间大于TLAB所能提供的空间,那么只可在公用的eden区梗概老年代分派内存空间了。

    回顾 1、JVM首选TLAB进行内存空间的分派; 2、TLAB占用扫数这个词eden区域的1%,这个值也不错通过参数自界说;

     

    通过这个问题也不错推理出另外一个问题,堆区在严格真理上说不是线程分享的。

     



    TOP