java程序可通过managementfactory.getclassloadingmxbean()获取classloadingmxbean实例,调用getloadedclasscount()、gettotalloadedclasscount()和getunloadedclasscount()分别获取当前加载类数、累计加载总数及卸载类数,支持类泄漏调试与启动分析。

Java 程序中可以通过 java.lang.management.ClassLoadingMXBean 获取实时类加载统计信息,无需额外依赖或代理,JVM 自带支持。
获取 ClassLoadingMXBean 实例
使用 ManagementFactory.getClassLoadingMXBean() 获取管理接口,它提供当前已加载类数、已卸载类数和是否启用类加载监控等信息:
- 调用
getLoadedClassCount()获取当前已加载的类数量(包括系统类和用户类) - 调用
getTotalLoadedClassCount()获取 JVM 启动以来累计加载过的类总数(含已被卸载的) - 调用
getUnloadedClassCount()获取已被卸载的类数量(仅当启用了类卸载且 GC 发生后才可能非零)
定期采样并打印类加载趋势
适合在调试类泄漏或分析启动耗时场景。例如每 2 秒打印一次加载数量:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
ClassLoadingMXBean classBean = ManagementFactory.getClassLoadingMXBean();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
System.out.printf("Loaded: %d, Total: %d, Unloaded: %d%n",
classBean.getLoadedClassCount(),
classBean.getTotalLoadedClassCount(),
classBean.getUnloadedClassCount());
}, 0, 2, TimeUnit.SECONDS);
结合 JVM 参数启用详细类加载日志(辅助验证)
若需定位具体哪些类被加载,可配合 JVM 启动参数:
-
-verbose:class:输出每个类加载/卸载事件(影响性能,仅用于诊断) -
-XX:+TraceClassLoading或-XX:+TraceClassUnloading(HotSpot 特有,效果类似) - 注意:这些参数不改变
ClassLoadingMXBean的数值,但能交叉验证加载行为
监听类加载变化(轻量级回调)
JMX 本身不提供事件通知,但可通过轮询差值模拟“变化监听”:
- 缓存上一次
getLoadedClassCount()值 - 间隔检查,若数值增加,说明有新类加载(如动态生成类、反射加载、OSGi 模块激活等)
- 适用于监控 Spring Boot 应用启动过程中类加载激增,或排查重复加载问题
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










