类元数据Class Metadata
Java classes在Java hotspot VM内部表示为类元数据。
在之前Java hotspot VM版本,类元数据在持久代中分配。
在JDK8,持久代被移除,并且类元数据在本地内存中分配。
默认情况下,本地内存都可以被用于类元数据。
可以使用MaxMetaspaceSize 选项设置在本地内存允许设置的最大类元数据。
Java hotspot VM显示的管理元数据空间。
OS请求空间,然后分成分片,类加载器分配元数据空间从分片中,当类没有被加载器加载时,它的分片交被回收以备OS重新使用。
元数据使用由mmap分配的空间,而不是由malloc分配的。
如果UseCompressedOops 与UseCompressedClassesPointers 选项同时被使用,那么两种逻辑不同的本地内存区域会处理类元数据。
当类被卸载时,类元数据将被释放。由于垃圾回收而被卸载的Java classes,垃圾回收会卸载并释放类元数据。
当类元数据达到一定水平时,会引起垃圾回收。在垃圾回收后,可以根据类元数据释放的空间量来确定是升高high-water mark还是降低high-water mark。如果升高high-water mark可能会引起垃圾回收。high-water mark最初设置为MetaspaceSize选项的值。
根据MaxMetaspaceFreeRatio 与MinMetaspaceFreeRatio两个选项决定high-water mark的提高还是降低。
如果已经分配的类元数据空间占比大于MaxMetaspaceFreeRatio的值,则high-water mark将降低。
如果已经分配的类元数据空间占比小于MinMetaspaceFreeRatio的值,high-water mark将提升。
可以为MetaspaceSize 选择指定更高的值,以避免对类元数据的过早垃圾回收。
为应用程序分配多少类元数据空间取决于应用程序,没有一个通用标准。
Heap PSYoungGen total 10752K, used 4419K [0xffffffff6ac00000, 0xffffffff6b800000, 0xffffffff6b800000) eden space 9216K, 47% used [0xffffffff6ac00000,0xffffffff6b050d68,0xffffffff6b500000) from space 1536K, 0% used [0xffffffff6b680000,0xffffffff6b680000,0xffffffff6b800000) to space 1536K, 0% used [0xffffffff6b500000,0xffffffff6b500000,0xffffffff6b680000) ParOldGen total 20480K, used 20011K [0xffffffff69800000, 0xffffffff6ac00000, 0xffffffff6ac00000) object space 20480K, 97% used [0xffffffff69800000,0xffffffff6ab8add8,0xffffffff6ac00000) Metaspace used 2425K, capacity 4498K, committed 4864K, reserved 1056768K class space used 262K, capacity 386K, committed 512K, reserved 1048576K
used为加载类使用的空间
capacity为可当前分片中可用的元数据空间
committed为可用的分片数量
reserved为元数据保留的空间数量
收藏文章数量从多到少与“把书读薄”是一个道理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!