专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

  元数据内存管理
  从JDK8开始,元数据从堆空间中被移除,放入本地内存中。为了更好地管理元数据空间,JVM也设计了一套独立的内存分配和回收的实现。在JDK16之前的实现中,元数据内存管理的底层实现也使用二叉树的内存块管理,使用的数据结构与CMS老生代中大块自由空间的数据结构完全相同。所以本节介绍一下元数据内存的管理。
  元数据区(也称为Metaspace)是JVM中一块非常重要的内存空间,应用运行时遇到元数据空间不足的情况会直接触发FullGC,对性能会产生一定的影响。内存管理
  Metaspace和类加载数据(ClassLoaderData,CLD)关联,简单地讲,每一个CLD都有一个Metaspace,CLD加载的所有类产生的元数据都在其对应的Metaspace中管理。
  整个JVM中所有的Metaspace使用的内存都通过VirtualSpaceList(简称VLS)管理,而VSL中的每一个节点(Node)使用VirtualSpaceNode(简称VSN)管理。使用VSN的目的是便于回收内存。数据整体结构图如图434所示。
  图434元数据空间内存管理整体结构
  每一个Node(即VSN)和VirtualSpace关联,VirtualSpace的内存使用总是按照顺序从头开始。但是类元数据的大小并不相同,导致Metaspace管理的内存块是多样化的,在类不再使用时还可以被卸载,占用的空间可以被回收。为了更好地管理元数据的分配和回收,在VSN中引入了以下两类结构:
  1)固定大小的结构,称为chunk。目前有3种chunk大小,分别是128B、512B和8KB。
  2)二叉树,管理超过8KB大小的内存块。
  VSN和VirtualSpace的关系如图435所示。
  图435VirtualSpaceNode和VirtualSpace关系示意图
  在图435中还有一个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频繁触发FullGC的情况,通常有两种可能:一是Metaspace空间太小,无法满足应用的需要;二是Metaspace碎片化率非常高,导致内存利用率不高。对于这两种情况,目前并没有特别好的解决方法,一方面要在应用中尽可能避免大量地、无限制地使用反射等消耗元数据空间的操作,另一方面可以考虑设置更大的元数据空间。元数据管理的优化
  在JDK16中正式合入一个关于元数据的补丁(patch),用于优化元数据的管理,详细内容参考JEP387〔1〕。这个特性本质上最大的改变是:
  ChunkManager中chunk使用伙伴存储来管理。伙伴存储管理是一个非常经典的内存管理技术,它分配速度快,造成的内存碎片少。
  伙伴存储可以简单地概括如下将内存块大小按照2的幂次划分,假设内存块从上向下逐步变小,上一层的内存块的大小等于下一层两个内存块的大小,在下一层内存不足时可以从上一层获取一个内存块并拆分为下一层的两个内存块,当下一层两个空闲的内存块连续时可以合并到上一层变为一个内存块。
  元数据的chunk中共划分为13层,最大的内存块是第0层,为4MB,最小的内存块是第12层,为1KB。每一层都是一个FreeList,管理相同大小的内存块,如图436所示。
  图436伙伴存储示意图
  使用新的管理方式来分配元数据,通常根据内存需要的大小从期望的level的FreeList中分配内存。当无法满足分配时,会从更大的内存块中尝试分配,这就涉及内存块的拆分。在JDK16的实现中,按照如下顺序进行内存分配:
  1)从level、level1、level2中依次请求分配内存,此时查找的是已经使用的内存块。
  2)如果不成功,从level0中依次请求分配内存,此时查找的是已经使用的内存块。
  3)如果不成功,再次尝试,从level12中依次请求分配内存,此时查找的是已经使用的内存块。
  4)如果不成功,从level12中依次请求分配内存,此时查找的是是否存在完全未使用的内存块。
  5)如果不成功,从level0中依次请求分配内存,此时查找的是是否存在完全未使用的内存块。
  6)如果不成功,重新请求一个VirtualSpaceNode(大小为8MB),可以拆分成两个第0层的内存块,再次尝试分配。
  另外,通常情况下元数据的分配是从chunk中获得的,但是在一些特殊的场景中,例如类加载失败或者类因重定义被重新加载,可能会导致需要释放内存。将这些内存单独管理起来并且重用,可以有效地提高内存使用的效率。使用FreeBlock的方式管理释放的内存,在FreeBlock中采用BinList和BinTree管理释放的内存。本文给大家讲解的内容是JVM垃圾回收器详解:并发标记清除回收,元数据内存管理下篇文章给大家讲解的内容是JVM垃圾回收器详解:并行回收的内存管理感谢大家的支持!

法国有心机,大批榴炮援乌,中国消防车被送往基辅,中俄要警惕俄罗斯与乌克兰大打出手已经接近百天,俄罗斯是在2月24日发起对于乌克兰的特别军事行动的,俄乌冲突很显然对于乌克兰来说是一场不对等作战,因为乌克兰的军事实力远不及俄罗斯,但是能够让乌拯救全队!中国女排首秀大逆转,丁霞冲上热搜榜,郎平言论获赞6月2日,中国女排在世联赛首秀以31逆转击败荷兰队,成功收获开门红。这场比赛是后郎平时代的首战,也是蔡斌二进宫中国女排的第一场比赛,他交出了一份不错的成绩单,在没有朱婷和张常宁的情拜登拍板援乌海马斯火箭炮,俄军先下手为强,炸毁利沃夫运输隧道俄罗斯与乌克兰已经激战近100天时间,俄罗斯是在2月24日当天发起对于乌克兰的特别军事行动,外界一直认为俄罗斯的特别军事行动将会是一场闪击战,但是如今俄罗斯已经将这场特别军事行动打国家电网全力服务扎实稳住经济的八项举措国家电网贯彻落实党中央国务院决策部署全力服务扎实稳住经济的八项举措国家电网有限公司深入学习贯彻习近平总书记重要讲话和指示精神,坚决落实党中央国务院决策部署,按照疫情要防住经济要稳住生活给了你巴掌,你应如何应对?吴军博士在见识一书中讲到如果有人给了你一巴掌,通常人都采取两种反应一是同样方式煽回去,二是捂脸认怂。但最应该有的态度,还有第三种,就是要思考别人为什么给巴掌?对方是神经病,还是因为油价调整消息6月2日调整后,全国9295号汽油零售价刚刚进入6月份国际原油就带来一份大礼,受到欧盟将在今年年底前完成对90的俄罗斯石油实施禁运的消息影响,布伦特原油在昨天继续上涨,价格已经逼近123美元桶的近3个月高位,这是布伦特原全国第55,超过乌鲁木齐,成为苏北枢纽,淮安完成华丽转身淮安,已经慢慢走进大家的视野。自从老淮阴分家之后,经常能看到的就是对于淮安淮阴名字争夺的喋喋不休。在2001年淮安市实行了三淮一体,设计到原地级淮阴市,原县级淮安市,原淮安县,淮安中央第二生态环境保护督察组向江苏省反馈督察情况中央第二生态环境保护督察组向江苏省反馈督察情况宋秀岩通报督察报告吴政隆表态发言许昆林主持为深入贯彻落实习近平生态文明思想,根据中央生态环境保护督察工作规定,中央第二生态环境保护督察晚报小米13系列曝光iPhone4S和6S将被列入过时产品清单嗨!尾巴们,晚上好,今天是6月1日重磅新闻国产独立显卡首次跑分出炉GeekBench跑分数据库里出现了一套兆芯的系统,不但有兆芯处理器(8核心8线程8MBL32。7GHz)兆芯主板24集买定离手我爱你今晚开播,我断言这部剧会很快火向全国说实话,我是被预告片中的这句话吸引进来的所有的事情,要么做第一个,要么做最后一个,中间的,没有人会记住。不是心灵鸡汤,而是社会中赤裸裸的现实。就在今晚,一部叫做买定离手我爱你的网剧毒蛇为什么是国家保护动物?随着夏季的到来各种各样的蛇虫鼠蚁慢慢得变得活跃了,估计每年被毒蛇咬伤的人数在30万以上,死亡率约为10。为什么毒蛇致死量这么大这么可怕却被国家列为保护动物呢?让我们一起来了解一下吧
愉妃78岁还被乾隆翻牌子,去世后被追封为贵妃,她究竟有何魅力乾隆五十六年,乾隆翻了已经78岁的愉妃的牌子,乾隆身边自是不会缺少年轻漂亮的妃嫔,乾隆为何却对已经年老色衰的愉妃情有独钟?一年后,愉妃离世,远在热河的乾隆连下四道旨意给愉妃治丧,百一组50年代中国老照片,带您回到上世纪,看看时代浪潮下哪里在变如果您身边有经历那时代的长辈,可以将照片给老人家看看,将他带回到那个令人难忘的时代,唤醒尘封的记忆。可能是美好,也可以是难忘。上世纪这个词,听起来,是那么的遥远,但是50年代,又听孙立人一生战功彪炳,却被蒋介石软禁,还被妻子逼他娶年轻护士?孙立人的前半生战功彪炳,他在抗日战争期间率领部队成功击退日军,曾带领部队成功击败日军并收复北缅甸,推进了抗日战争的胜利。孙立人的后半生却是酸甜苦辣都尝尽。这是为什么呢?虽然,他的仕李弥想当缅甸王,引起轩然大波蒋介石你赶紧回来吧上世纪五十年代,一位英国记者在泰国曼谷采访了国军将领李弥,突然问道听说你当年准备做云南王,不知是否有此事?李弥摇了摇头,说云南王可做不了,但想当缅甸王倒轻而易举,就看我想不想做了!成都有哪些有意思的地方?前两天刚去了成都,整体来说整个成都的生活节奏是很慢的,给我的感觉非常舒适。这次去成都除了吃吃吃之外,还去了两个地方,都觉得挺好玩的,接下来我这边来推荐一下。武侯祠因为本身是一个比较重庆渝北区的古镇多不多?谢谢邀请,首先来说说什么是古镇,古镇指的是指那些有着百年以上历史的,供集中居住的建筑群,而在重庆渝北区,称得上古镇的就只有龙兴古镇了。龙兴镇位于重庆市渝北区东南部,距重庆市主城36半个月可以写出一个电脑操作系统吗?作为一名计算机专业的同学回答这个问题可以个锤子。理由如下windows7操作系统,据微软官方给出的数据,就有超过5000万行代码,并且这套操作系统是微软的平均约40人的25个研发小两百多的无线蓝牙耳机和一千多的AirPods,外观几乎一样,硬件差距在哪里?苹果的airpords小编肯定是没钱买的,一千多一般人真买不起,但是小编是挺喜欢蓝牙耳机的,尤其是真无线的那种,肯定有小伙伴在考虑蓝牙耳机的问题,所以和大家谈谈我的使用感受,最近在同济大学博士,连个蚌埠学院工作都聘不上,到底什么原因?个人能力可能跟不上!我九八年本科(杭州大学生命科学学院,两个月后并入浙大)毕业前三个月应聘到台州师范专科学校(台州学院,杭大体育馆招聘会上面试),没有试讲,直接签协议!入职后,半年为什么很多银行里面没有公共卫生间?银行里面是没有卫生间的,你们知道吗?在银行上班的人员,上卫生间就是她们十分头疼的事情。不得不找附近的公共卫生间来解决。得知原因后,不得不为银行的做法点赞。我自己经营了一家酒店,旁边如何评价没有产业支撑的小县城,房价6000多元的现象?如何评价没有产业支撑的小县城,房价6000多元的现象?这当然不是一个好现象,我们老家一三一四年好像还在四千徘徊,现在涨到六千多近七千,据说还是相关部门压着,要不还有上涨趋势。这对于
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网