元空间以内存块链表形式按类加载器粒度统一管理,不随单个类卸载释放,仅当类加载器及其所有Class对象均不可达时,其占用的MetaChunk才被批量回收。

元空间内存分配与类加载器紧密绑定,不是按类粒度独立申请,而是以类加载器为单位统一管理。
每个类加载器拥有专属的元空间内存块链表
类加载器在首次定义类时,会向全局 ChunkManager 申请一个或多个 MetaChunk,这些块逻辑上归属该加载器,物理上可能分散在不同 VirtualSpace 节点中。Bootstrap、Platform、Application 三类系统类加载器各自维护独立链表;自定义类加载器也一样,在 defineClass 阶段触发首次分配,并将块生命周期绑定到自身。
元空间内存不随单个类卸载而释放
一个类即使被 GC 回收,只要它的类加载器还存活(比如被静态引用、线程上下文持有等),其占用的元空间就不会释放。只有当整个类加载器对象被垃圾回收时,它名下所有 MetaChunk 才会被标记为空闲,归还至 ChunkManager 的全局空闲列表,供后续复用。
分配方式是组块+指针碰撞
元空间虚拟机维护全局空闲组块池。类加载器申请时从中取出一块,内部再按需划分为更小单元(如 Klass、ConstantPool、Method 等结构),使用类似“指针碰撞”的方式快速分配,无需频繁调用系统 malloc。
回收依赖类加载器的可达性
判断是否可回收,关键看两点:一是该类加载器实例本身不可达(无强引用);二是它加载的所有类的 Class 对象也不可达。二者同时满足,Full GC 阶段才会触发元空间批量清理。

















