IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> JVM 垃圾回收器 ZGC内存管理 -> 正文阅读

[系统运维]JVM 垃圾回收器 ZGC内存管理

JVM 垃圾回收器 ZGC内存管理

学习ZGC,主要通过学习ZGC设计与实现书籍,并以博客的形式记录学习内容

ZGC 实现了两级内存管理:虚拟内存和物理内存,并且实现了物理内存和虚拟内存的映射关系。这和操作系统中虚拟地址和物理地址设计思路基本一致。

多视图映射

操作系统支持多个虚拟地址同时映射到一个物理地址上,当我们操作其中一个虚拟地址,所有虚拟地址都能访问到最新的数据。
Linux主要通过系统函数mmap完成视图映射,多个视图映射就是多次调用mmap函数,多次调用的返回结果就是不同的虚拟地址。
ZGC仅支持Linux 64位系统,所以ZGC是通过系统调用mmap来完成地址多视图映射的。

页面设计

ZGC将内存划成小的分区,在ZGC中称为页。ZGC支持3种页面,分别为小页面、中页面和大页面。其中小页面指的是2MB的页面空间,中页面指的32MB的页面空间,大页面指受操作系统控制的大页。
在这里插入图片描述
在ZGC中,不同对象的大小会使用不同的页面类型。上表中,MinObjectAlignmentInBytes 的默认值是8,它是由参数ObjectAlignmentInBytes控制,大小在8~256之间,且为2的幂次。通常来说,粒度越大,处理器访问内存的速度越快,但可能导致过多的浪费。在实际中可以根据应用系统对象的平均大小来合理地设置该值。
小页面优先回收;中页面和大页面尽量不回收。

对NUMA的支持

在这里插入图片描述
统一内存访问(UMA),指的是任何CPU访问任何内存的速度是一致的,不必考虑不同内存地址之间的差异。各个处理器与内存单元通过互联总线进行连接,各个CPU之间没有主从关系。
在这里插入图片描述
在这里插入图片描述

非统一内存访问(NUMA),在多CPU下,为了提升性能,将CPU和内存集成在一个单元上,CPU访问本地存储器的速度比访问非本地存储器快一些。

ZGC是支持NUMA的,在进行小页面分配时会优先从本地内存分配,当不能分配时才会从远端的内存分配。对于中页面和大页面的分配,ZGC并没有要求从本地内存分配,而是直接交给操作系统,由操作系统找到一块能满足ZGC页面空间。

小页面支持NUMA,中页面和大页面不支持NUMA。

ZGC中的物理内存管理

ZGC中内存空间的分配是以页面为粒度(最小粒度是2MB)。ZGC为了减少对操作系统物理内存频繁操作,设计了自己的物理内存管理系统,ZGC中物理内存实际上仅仅记录了操作系统物理内存的使用情况。
ZGC中物理内存管理的基本单位是段,它包含start和end。在内存分配阶段每一段是2MB,也就是说ZGC在向操作系统请求物理内存的最小粒度是2MB,超过2MB的内存空间会被划分成多个段。
假如应用程序申请一个超大的对象需要10MB空间,则将其转化成5个段,每个段为2MB。在ZGC和操作系统交互时,将分成5次向操作系统申请内存,所以可以把一个大对象分配在操作系统层面不连续的物理空间中。但是在ZGC的物理内存管理中,分配成功后会把这些段进行合并,因为这5个段是连续的地址。
段是ZGC向操作系统请求内存的基本单位,而页面是对象内存管理的的单位。

ZGC中的虚拟内存管理

对于小页面ZGC会从虚拟内存的头部开始分配,对于中页面和大页面ZGC从虚拟空间的尾部开始分配。这样设计的目的是方便对象的管理,小页面分配和释放的成本都不高,但是分配和释放中页面和大页面成本很高。

对象空间分配

在这里插入图片描述
在这里插入图片描述

页面分配

在对象空间分配时,如果页面还有空间,则能快速的分配对象,如果页面空间不足,则需要申请新的页面,页面分配主要通过页面管理器实现。
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 12:08:59  更:2021-10-08 12:09:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:29:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码