程序员:为什么程序总是那么慢?时间都花到哪里去了?
面试官:若你写的 Java 程序,出现了性能问题,该怎么去排查呢?
工欲善其事必先利其器,为你呈上一箩筐性能优化工具,必有一款满足你,废话不多说,直奔主题。
1.hprof 工具
hprof 工具是通过织入监控代码,来对 Java 程序进行监控的一款工具。可以监控 Java 程序在运行时占用的 CPU,及统计堆内存使用等。
例如:每隔 10 毫秒采样 CPU 消耗信息,并把信息保存到 hprof.txt 文件中。
java -agentlib:hprof=cpu=times,interval=10,file=hprof.txt class
指令运行完,打开 hprof.txt 便很容易统计出哪些方法的运行耗时较长。
例如:输出 Java 应用程序中各个类所占用的内存百分比。
java -agentlib:hprof=heap=sites,file=hprof.txt class
备注:若未指定 file=hprof.txt,则默认会生成 java.hprof.txt 文件
打开输出的文件,效果如下。
例如:将 Java 应用程序的堆快照保存在文件 core.hprof 中,然后就可以使用 VisualVM 等工具来分析这个堆文件啦。
java -agentlib:hprof=heap=dump,format=b,file=core.hprof class
采用 VisualVM 工具打开 core.hprof 文件进行分析堆快照,效果如下。
2.JConsole 工具
JConsole 是 Java 自带的图形化性能监控工具,可以让你摆脱命令行排查问题的痛苦。通过它,会非常容易的监测 Java 程序的运行情况。