zoukankan      html  css  js  c++  java
  • 【JVM】metaspace系列-metaspace分层设计

    metaspace系列-metaspace初识中我们知道metaspace这个类定义了几个属性,这几个属性其实是三对,因为metaspace里面包含了两类数据,分别是类相关的元数据和非类相关的元数据,从下图截取src/share/vm/memory/metaspace.hpp的源码图可以看出来元数据分为两种。接下来我们挨个看看所有的属性

    SpaceManager

    SpaceManager是用来给Metaspace管理内存的。

    关注几个属性

    属性名称 属性作用
    Metaspace::MetadataType _mdtype; metadata的类型,分为类相关metadata和非类相关metadata
    Metachunk* _chunks_in_use[NumberOfInUseLists]; 当前SpaceManager中正在被使用的chunk的列表,这个在SpaceManager被回收的时候可以用来快速定位到那些chunk应该被回收
    size_t _allocated_blocks_words; 所有block所占的内存大小
    size_t _allocated_chunks_words; 所有chunk所占的内存大小
    BlockFreelist _block_freelists; 空闲的chunk列表,这里面的chunk再分配时会被重新使用

    allocate

    上面是SpaceManager的allocate的方法,这里需要注意的是分配的时候不是直接就从_block_freelists这个空闲列表中分配,因为从空闲列表直接分配的话,他需要遍历找到一个合适大小的,而遍历的成本比较高,所以他只当空闲列表变大的时候,也就是到达4K的时候才会从空闲列表中分配

    retire_current_chunk

    我们从图中可以看到对于当前chunk,如果他的剩余空间不够分配到新的block,而且他的空间大于min_size的话,他会把这块空间放到block_freelists空闲列表中

    析构函数

    ChunkManager

    ChunkManager是用来全局管理chunk空闲列表的

    _free_chunks

    ChunkManager中的_free_chunks是用来管理所有的空闲chunk的,SpaceManager中的 _block _freelist是用来管理所有空闲的block的。

    这里的_free_chunks是一个ChunkList链表的数组,NumberOfInUseLists为4,因为Chunk总共分为四类,四类

    chunk_freelist_allocate

    free_chunks_get

    VirtualSpaceList

    VirtualSpaceList是用来管理VirtualSpaceNode的,VirtualSpaceNode是用来metadata分配的

    create_new_virtual_space

    get_new_chunk

  • 相关阅读:
    使用 VSCode 编写 .NET Core 项目之初体验
    Apache自带 ab压测工具 Windows配置使用说明
    HTTP 错误 401.3
    Knockout学习,添加模板,事件,Mouseover,mouseout
    QQ空间、新浪微博、腾讯微博等一键分享API链接代码
    Session["Write"] = "Write";
    那一年,不堪回首的毕业设计
    iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题
    nopcommerce
    HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
  • 原文地址:https://www.cnblogs.com/colin-xun/p/14190426.html
Copyright © 2011-2022 走看看