[JVM] GC日志中的Metaspace

GC日志中的Metaspace

参考文章: java面试:你真的知道metaspace??
参考文章: 理解JVM堆中Metaspace的输出

在GC日志中,有这么一段

 Metaspace       used 2652K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K

Metaspace被分为了4个部分,分别是usedcapacitycommittedreserved,同时还多了一个class space,同样被分为了这4个部分

对于这个,Oracle官网给出了解释

Oracle文档
In the line beginning with Metaspace, the used value is the amount of space used for loaded classes. The capacity value is the space available for metadata in currently allocated chunks. The committed value is the amount of space available for chunks. The reserved value is the amount of space reserved (but not necessarily committed) for metadata. The line beginning with class space line contains the corresponding values for the metadata for compressed class pointers.

StackOverFlow中对于这个部分的解释

Stackoverflow

Stackoverflow

Metasapce由多个虚拟空间组成,虚拟空间就是系统中的一些连续的内存空间,它们按需分配。分配时,虚拟空间从系统中保留内存,但是还没有提交,Metaspace中的reserved就是所有的虚拟空间总和

虚拟空间中的分配单元是一个一个的meta chunk,当一个新的chunk从虚拟空间中被分配时,它所相关连的内存也被提交,Metaspace中的committed就是所有的chunk总和

新的chunk的内存分配

  • 在空闲列表中寻找已存在的空闲chunk
  • 如果没有找到合适的chunk,那么会在当前的虚拟空间中重新分配一个
  • 如果当前的虚拟空间中已经没有内存可用了,那么会reserve:预定一个新的虚拟空间

类元数据被分配在一个个的chunk中,一个chunk可能不会包含多个classloader,但是一个classloader可能会横跨多个chunk,Metaspace中的used就是所有的包含了类元数据信息的chunk

Metaspace中的capacity就是已经分配内存的chunk总和,包括没有被used

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值