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

一文就带你把JVM并发标记清除回收,元数据内存管理给一次性搞懂

  元数据内存管理
  从JDK 8开始,元数据从堆空间中被移除,放入本地内存中。为了更好地管理元数据空间,JVM也设计了一套独立的内存分配和回收的实现。在JDK 16之前的实现中,元数据内存管理的底层实现也使用二叉树的内存块管理,使用的数据结构与CMS老生代中大块自由空间的数据结构完全相同。所以本节介绍一下元数据内存的管理。
  元数据区(也称为Metaspace)是JVM中一块非常重要的内存空间,应用运行时遇到元数据空间不足的情况会直接触发Full GC,对性能会产生一定的影响。 内存管理
  Metaspace和类加载数据(Class Loader Data,CLD)关联,简单地讲,每一个CLD都有一个Metaspace,CLD加载的所有类产生的元数据都在其对应的Metaspace中管理。
  整个JVM中所有的Metaspace使用的内存都通过VirtualSpaceList(简称VLS)管理,而VSL中的每一个节点(Node)使用VirtualSpaceNode(简称VSN)管理。使用VSN的目的是便于回收内存。数据整体结构图如图4-34所示。
  图4-34 元数据空间内存管理整体结构
  每一个Node(即VSN)和VirtualSpace关联,VirtualSpace的内存使用总是按照顺序从头开始。但是类元数据的大小并不相同,导致Metaspace管理的内存块是多样化的,在类不再使用时还可以被卸载,占用的空间可以被回收。为了更好地管理元数据的分配和回收,在VSN中引入了以下两类结构:
  1)固定大小的结构,称为chunk。目前有3种chunk大小,分别是128B、512B和8KB。
  2)二叉树,管理超过8KB大小的内存块。
  VSN和VirtualSpace的关系如图4-35所示。
  图4-35 VirtualSpaceNode和VirtualSpace关系示意图
  在图4-35中还有一个ChunkManager(简称CM)也是全局共享的,主要目的是当类被卸载时对应的Metaspace会被释放。但可能其使用的VSN中还存储其他的类元数据,所以VSN无法被回收,因此会将释放的元数据内存放入ChunkManager中,供后续的元数据分配使用。
  Metaspace中有一个成员变量SpaceManager,用于管理本Metaspace对应的CLD真正使用的内存块(包括固定大小的内存块和二叉树中的内存块)。在SpaceManager中还有一个BlockFreeList的链表,用于保存一些零碎的内存(这些内存通常来自类加载失败或者类因重定义被重新加载而释放的内存)。 分配
  Metaspace的内存分配过程大体可以分为如下几步:
  1)尝试从BlockFreeList中进行分配,但是由于BlockFreeList对于小微内存直接使用链表方式管理,空间不连续,因此分配成本比较高。在JVM中会设置一定的条件,当满足这些条件时才能从BlockFreeList中分配。
  2)无法从BlockFreeList中分配时,从Metaspace中正在使用的chunk中分配,这个chunk相当于缓存,用于加速分配。
  3)没有可用的chunk时会分配一个chunk再响应分配。分配chunk的逻辑相当复杂:优先从ChunkManager中重用已经释放的chunk,如果无法找到合适的chunk,则需要从VirtualSpaceNode中分配;如果VirtualSpaceNode也无法满足分配需求,会扩展VirtualSpaceList的大小再来分配。
  VirtualSpaceList的扩展是指为VirtualSpaceList分配新的VirtualSpaceNode。每个VirtualSpaceNode的大小为256KB(无法在运行时态调整其大小),将VirtualSpaceNode限制为256KB的目的是便于回收VirtualSpaceNode,当整个VirtualSpaceNode没有任何chunk时就可以被回收。 回收
  理解了Metaspace的分配以后,其回收过程就不难理解了。由于Metaspace和CLD相关联,当CLD被卸载以后就可以执行Metaspace的回收。
  Metaspace的回收首先是将卸载的类元数据内存块归还到ChunkManager中,以便后续再利用。在这一步中并不会真正释放内存,仅仅是将内存归还到ChunkManager中,以便其再次被利用。而Metaspace真正的回收是针对VirtualSpaceNode的回收,当且仅当VirtualSpaceNode中所有的chunk都是空闲的才能被释放,而这样的情况并不常见。通常来说,Metaspace的回收仅仅是将类元数据占用的空间释放再利用,很少能真正地回收内存。
  在实际工作中可能会遇到Metaspace频繁触发Full GC的情况,通常有两种可能:一是Metaspace空间太小,无法满足应用的需要;二是Metaspace碎片化率非常高,导致内存利用率不高。对于这两种情况,目前并没有特别好的解决方法,一方面要在应用中尽可能避免大量地、无限制地使用反射等消耗元数据空间的操作,另一方面可以考虑设置更大的元数据空间。 元数据管理的优化
  在JDK 16中正式合入一个关于元数据的补丁(patch),用于优化元数据的管理,详细内容参考JEP 387 [1] 。这个特性本质上最大的改变是:
  ChunkManager中chunk使用伙伴存储来管理。伙伴存储管理是一个非常经典的内存管理技术,它分配速度快,造成的内存碎片少。
  伙伴存储可以简单地概括如下将内存块大小按照2的幂次划分,假设内存块从上向下逐步变小,上一层的内存块的大小等于下一层两个内存块的大小,在下一层内存不足时可以从上一层获取一个内存块并拆分为下一层的两个内存块,当下一层两个空闲的内存块连续时可以合并到上一层变为一个内存块。
  元数据的chunk中共划分为13层,最大的内存块是第0层,为4MB,最小的内存块是第12层,为1KB。每一层都是一个FreeList,管理相同大小的内存块,如图4-36所示。
  图4-36 伙伴存储示意图
  使用新的管理方式来分配元数据,通常根据内存需要的大小从期望的level的FreeList中分配内存。当无法满足分配时,会从更大的内存块中尝试分配,这就涉及内存块的拆分。在JDK 16的实现中,按照如下顺序进行内存分配:
  1)从level、level+1、level+2中依次请求分配内存,此时查找的是已经使用的内存块。
  2)如果不成功,从level0中依次请求分配内存,此时查找的是已经使用的内存块。
  3)如果不成功,再次尝试,从level12中依次请求分配内存,此时查找的是已经使用的内存块。
  4)如果不成功,从level12中依次请求分配内存,此时查找的是是否存在完全未使用的内存块。
  5)如果不成功,从level0中依次请求分配内存,此时查找的是是否存在完全未使用的内存块。
  6)如果不成功,重新请求一个VirtualSpaceNode(大小为8MB),可以拆分成两个第0层的内存块,再次尝试分配。
  另外,通常情况下元数据的分配是从chunk中获得的,但是在一些特殊的场景中,例如类加载失败或者类因重定义被重新加载,可能会导致需要释放内存。将这些内存单独管理起来并且重用,可以有效地提高内存使用的效率。使用FreeBlock的方式管理释放的内存,在FreeBlock中采用BinList和BinTree管理释放的内存。 本文给大家讲解的内容是JVM垃圾回收器详解:并发标记清除回收,元数据内存管理下篇文章给大家讲解的内容是JVM垃圾回收器详解:并行回收的内存管理感谢大家的支持!

山西提质增效锻长补短全力培育发展新动能吉利汽车晋中公司焊装车间工业和信息化领域是山西转型发展蹚新路的主战场主阵地。在工信部的指导支持下,山西省高效统筹疫情防控和工业经济发展,坚持以10个重点产业链为牵引,以传统产业改造达利食品陷业绩下滑困局毛利率明显下降,研发成本微乎其微,机构不断下调买入评级蛋黄派小面包薯片它们的存在构成了90后童年记忆中的传统货架一隅。而随着消费市场的升级与消费诉求的日趋多样化,传统的休闲零食亟待通过创新寻求新的生机。据官网介绍,达利食品集团有限公司10天上涨100亿,千亿市值医药股为何是这十家?人民日报健康客户端记者王振雅人民日报健康客户端记者不完全统计发现,迈瑞医疗恒瑞医药药明康德片仔癀等10只医药股市值超千亿规模。人民日报健康客户端记者观察到,仅10天,迈瑞医疗市值已小阳春提前了!关于2023年楼市,你要知道的5件事!更多精彩内容敬请关注西瓜说房公众号2022年,就在磕磕绊绊中过去了,我们会怀念这个特殊的年份。三年过去了,我们迎来了政策的新变化,一切都在慢慢恢复。房地产市场也迎来了转折从2020房地产十大意外事件丨回望2022作者丨耿宸斐出品丨焦点财经2022年,对房地产而言,注定是行业发展史上非比寻常的一年。规模缩水房企暴雷停贷蔓延楼市疲软土地市场无人问津上千条救市政策相继落地行业已然进入深度调整期。2022医疗健康投融资盘点投资缩减热度下降,资本方回归谨慎人民日报健康客户端杨海丹2022年,我国资本市场一级市场融资额度与投资交易案例大幅度下降,交易金额同比减少45。4。岁末年初,人民日报健康客户端联合易凯资本,结合投融资案例数据,共学学股市方法步骤!别再盲目炒股!原创四色交易策略,简单叙述绿色柱子个股,不碰!绿变黄色柱子,关注!红变黄,减仓,或清仓!红色柱子,耐心持股!傻瓜式操盘,交易买卖点清晰,适合新手老手,使用该指标,新手胜老手。低位为各国央行面临史诗级抗通胀斗争澳大利亚对话网站1月3日发表题为2023年全球经济为什么各国央行在政治因素阻碍下面临史诗级抗通胀斗争?的文章,作者是英国伦敦大学荣誉研究员史蒂夫希费雷斯,文章编译如下2023年,世青年团干王炜炜才下扶贫战场又上振兴一线王炜炜在全国人民满意的公务员和人民满意的公务员集体表彰大会现场。王炜炜和村民一起下田干农活。王炜炜在查看农作物受灾情况。受访者供图在我们三乐村,每个人都在念他的好只要一提起驻村扶贫规模越大,业绩越差?基金魔咒又应验了Wind数据显示,在2022年三季度末规模超百亿元的基金中,仅有1只基金2022年实现正收益,规模魔咒似乎再次得到验证。规模扩大真的会带来业绩下滑吗?大规模基金该如何摆脱船大难掉头硕博毕业季纸短情长,感谢有你又是一年毕业季在向战而行的科研路上每个人都留下了无悔的奋斗足迹这一路有你们的相知相伴沿途风景便生出许多旖旎纸短情长我想对你说01致母校伫立北门的训词和校训从我走进科大便一路引领着我
甘肃纪检监察网评论勇于自我革命是中国共产党最鲜明的品格,全面从严治党是新时代党的自我革命伟大实践。刚刚闭幕的省第十四次党代会,科学分析当前形势,擘画布局今后五年发展蓝图,明确提出要坚持全面从严管党治比亚迪唐DMi发布预售价,29。2828。28万元起这几年以来,各家车企已经把惊爆眼球的花招使遍了,好像再听到什么新技术咱都不会High起来了。不过,比亚迪还是有办法再次搞出王炸,而比亚迪用的招数并非黑科技一类,而是扎扎实实的在性能规距律法人,作为在地球目前以知的众生里面,是惟一具备着较高级的有语音互知,情感互动,行动互帮,禁止互约的各项指标性的高等文明体系。而作为人,在领导着带领着发掘着地球上所有的生灵体共有的各项20个生活小妙招一些生活小妙招让生活越来越美好。1给自己准备一个存钱的小罐子,你会不自觉地存一些钱进去。就像朋友送了你一个花瓶,你会想养花。2在家里的橱柜,衣柜底部,铺一些报纸,可以防潮,吸灰。3动漫壁纸推荐高清壁纸篇五百七十八欢迎来到影视小站灵制作,本头条号会定时更新动漫,游戏,高清壁纸,有需要指定动漫或者游戏高清壁纸的朋友,可以留言或者私信,我会尽量帮忙收集。高清无水印壁纸分享,二次元插画推荐。点击图每日壁纸又得一夜无眠全世界有趣的灵魂都关注了半杯仙气关注我天天换壁纸头像图源网络,侵权请联系删除,谢谢不要老是封闭在自己的世界里,少以己度人,你没有拥有的东西,不代表它不存在。多看看别人的生活,你就会秦惠文王和五国攻秦的故事秦惠文王又称秦惠王,他为嬴姓,赵氏,名为驷,他是秦孝公的儿子。秦惠文王是战国时期的秦国国君,他的执政时间是从公元前337年到公元前311年。秦惠文王十九岁的时候就继位了,因为当时宗耳鸣耳聋,左慈丸不好用,教你一招作用翻倍为什么耳鸣用耳聋左慈丸效果不好,今天和医生教你一招作用翻倍,很多人得了耳鸣,最常用的一个中成药就是耳聋左慈丸了,那为什么很多人说我用耳聋左慈丸没用呢,甚至一用就上火呢?那今天和医生全国哪的牛奶最好喝?经过评比,这7种牛奶脱颖而出,有你家乡吗笔者是个资深的乳制品爱好者,对牛奶的喜爱难以言表。牛奶不仅营养价值高,而且口感醇厚,奶香味十足,不论是作为早餐的饮品,或者是晚上来一杯香浓的热牛奶助眠,都是非常好的。这么多年来,也也说今日高考语文6月7日。高考第一天。天阴,但没有下雨。天气凉爽,给高考的孩子们助力。今天,曾经的学生发过来短信,短信里一片的哀嚎声。说题变了,曾经的1719的语言运用的三道选择题变成了填空题,还苹果CarPlay功能确实好用深圳头条不懂多少苹果最新发布的CarPlay的新功能,只是分享一下使用心得。手机插上车里的USB接口,手机屏幕上的基本功能就同步到车上的屏幕了。基本是秒同步的。让人最感动的手机同时