1. 介绍
在JavaWeb工程中有可能无意引入过多无用第三方jar包,导致传输速度慢、启动加载慢、有可能影响到运行性能降低。我们需要对这些无用第三方jar包进行清理,单纯靠人工排除工作量还是蛮大。
这时我们可以借助loadedclasses对正在运行中的jvm进行分析,分别监测出:
-
- 已被jvm加载的jar包 (如果相关代码未执行到,jar不会被加载)
- 工程在打包时引入的jar包
- 建议移除的jar包
根据监测结果辅助人工进行工程减肥
优势PK:
JVM 自带的启动参数-verbose:class 只能分析启动时加载的jar包,而此工具可以分析运行时加载的jar包
2. 应用
loadedclasses是个带main入口的jar包,可以通过“java -jar”命令启动。
loadedclasses.jar参数列表:
参数位置 | 必填 | 参数描述 |
1 | 可选 | jvm进程ID,可以通过jps命令获取 |
2 | 可选 | 监测结果文件输出路径 |
3 | 可选 | loadedclasses.jar路径 |
如果3个参数都为空,将输出当前主机所有运行的jvm进程ID。通常情况下只要pid这个参数就可以了。
Windows
java -Xbootclasspath/a:%JAVA_HOME%/lib/tools.jar -jar loadedclasses.jar PID
Linux
java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar loadedclasses.jar PID
3. 演示
- 执行命令
- 查看结果
loadedclasses-20150929161440190.txt
内容解释:
RUNTIME LOADED CLASSES 运行时加载的class(运行时的分析,工程运行一段时间才更准确)
RUNTIME LOADED JARS 运行时加载的jar包(运行时的分析,工程运行一段时间才更准确)
DEPENDENCE JARS 通过依赖分析出的jar包(根据目录分析,weblogic/jboss容器不能参考它,ATG不能参考它)
SUGGEST REMOVE JARS 推荐移除的jar包(根据目录分析,需要经过测试验证)