JVM/JVM-元空间


整体结构图

JVM-元空间结构

Virtualspace
 +- Committed: 已提交的空间, 会被划分成一个个MetaChunk
 |   +- Took: 已经被划分成MetaChunk的空间
 |   |   +- MetaChunk in Used: 一个被使用的MetaChunk
 |   |   |   +- Head: MetaChunk头部, 64位上占40个字节
 |   |   |   +- Metaspace Object: 分配在Metaspace中的对象, 对象类型在下文介绍
 |   |   |   +- Private Free Block: 可重复利用的Block, 但是只能被关联的ClassLoaderData所使用
 |   |   |   +- Unusable Block: 暂时无法重新利用的Block, 只有等到ClassLoaderData能被回收才会释放
 |   |   |   +- Wait To Free Object: 分配在Metaspace中的对象, 已经可以被回收了, 但是还未被回收
 |   |   |   \- Private Free: MetaChunk中剩余的空间, 只能被关联的ClassLoaderData所使用
 |   |   \- MetaChunk in Global Free List: 空闲的MetaChunk, 所有ClassLoaderData都能获取
 |   \- Global Free: 还能继续被划分成MetaChunk的空间, 全局共享
 \- Uncomitted: 未被提交的空间, 无法使用

JVM-元空间内容示意图

碎片化问题

MetaChunk 会导致碎片化问题

参考:

1、ATA文章:https://ata.atatech.org/articles/11000102553?layout=%2Fvelocity%2Flayout%2Fblank.vm


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录