Java监控JVM类加载数量主要通过ClassLoadingMXBean编程获取或jstat -class命令行工具查看;前者支持内嵌轮询统计新增加载,后者适合运维实时诊断;还可启用-verbose:class定位具体类,或通过JMX远程接入统一监控平台。

Java 中监控 JVM 实时加载的类数量,主要通过 运行时 MBean 接口 和 命令行工具 jstat 两种方式实现,兼顾程序内嵌监控与运维现场快速诊断。
用 ClassLoadingMXBean 实时读取(适合代码集成)
Java 提供了标准的管理接口 ClassLoadingMXBean,可直接获取当前已加载类数、总加载数和卸载数:
- 调用
getLoadedClassCount()获取当前活跃加载的类数量(即尚未被卸载的类) -
getTotalLoadedClassCount()返回 JVM 启动以来累计加载过的类总数(含已卸载) -
getUnloadedClassCount()返回已被卸载的类数量,三者满足:总数 = 当前加载 + 卸载数 - 建议配合定时轮询(如每2秒一次),缓存上一值并比对差值,即可感知“新增加载”行为,适用于 Spring Boot 启动分析或 OSGi/动态代理场景
用 jstat -class 实时查看(适合运维排查)
无需修改代码,直接在终端执行:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
jstat -class <pid> 1000—— 每秒输出一次类加载统计,持续刷新 - 关键字段含义:Loaded(当前已加载类数)、Bytes(加载类占用元空间字节数)、Unloaded(已卸载类数)、Time(类加载总耗时,单位秒)
- 若发现 Loaded 持续增长而 Unloaded 几乎为 0,需警惕类泄漏,常见于反复定义 Lambda、CGLIB 代理、或未清理的自定义类加载器
启用 -verbose:class 辅助定位具体类(用于深度诊断)
当需要知道“哪些类被加载”而非仅数量时,启动 JVM 时添加参数:
立即学习“Java免费学习笔记(深入)”;
-
-verbose:class或-XX:+TraceClassLoading:启动后每加载一个类就打印一行日志,包含类名和来源 JAR - 日志默认输出到控制台,生产环境建议重定向到文件(如
java -verbose:class MyApp > classlog.txt 2>&1) - 注意:该参数有明显性能开销,仅限问题复现阶段使用,不可长期开启
结合 JMX 远程监控(适合统一平台接入)
若应用已启用 JMX(如配置了 -Dcom.sun.management.jmxremote),可通过 JConsole 或 Prometheus + JMX Exporter 抓取指标:
- MBean 名称:
java.lang:type=ClassLoading - 暴露属性:
LoadedClassCount(对应getLoadedClassCount)、TotalLoadedClassCount等 - 这种方式便于与现有监控体系整合,支持图表化趋势分析和告警

















