https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html 尝试解释这一行:Metaspace used 2425K, capacity 4498K, committed 4864K, reserved 1056768K
再次引用上面的链接:在以Metaspace开头的行中,used 值是用于加载类的空间量。 capacity 值是当前已分配块中元数据(metadata)的可用空间。 committed 值是可用于块的空间量。 reserved 值是为元数据保留(但不一定分配)的空间量。
我想知道每个字段的含义(used、capacity、committed、reserved),但我很难理解上面的定义。空间从操作系统(OS)请求,然后分成块。类加载器(loader)从其块(chunk)为元数据(metadata)分配空间(chunk绑定到特定类加载器)。
我的理解是,Metaspace是从JVM进程的虚拟地址空间中划分出来的。JVM在启动时根据-XX:MetaspaceSize基于未经记录的平台特定默认值来预留初始大小。我假设reserved指的是metaspace的总大小。该空间被分成块(chunk)。我不确定每个块(chunk)的大小是否相同。每个块(chunk)包含与单个类加载器(loader)关联的类元数据(metadata)。
容量和已承诺的听起来对我来说像是剩余空间(根据链接中的定义)。由于元数据存储在块内,因此我会认为已用 + 容量将等于已承诺,但实际上并不是这样。也许已承诺的意思是保留的已用空间,但那么已用指什么?元数据使用的已用空间?那么,还有哪些其他方式可以利用空间呢?
希望你能理解我的困惑。我希望能就这些定义得到澄清。