最近在工作中经常和性能压测工作打交道,积累了一些性能分析经验,我觉得这些经验对每一个开发者都有帮助的,能开发出性能高的代码也是我们的最终目标。
由易到难,我们逐步介绍不同命令的用法和好处,这些命令是如何帮助我们开发人员进行性能分析的。
一、开发者的自测利器-Hprof命令
1、示例演示
例子程序:
/**
* PROJECT_NAME: test
* DATE: 16/7/22
* CREATE BY: chao.cheng
**/
public class HProfTest {
public void slowMethod() {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
public void slowerMethod() {
try {
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HProfTest test = new HProfTest();
test.slowerMethod();
test.slowMethod();
}
}
注:这是一段测试代码通过sleep方法进行延时,在程序运行过程中很慢,我想知道到底是哪段程序影响的整体性能呢?
我在这个java程序中,加了如下运行参数:
-agentlib:hprof=cpu=times,interval=10
/*
times:java函数的执行时间
hprof=cpu是针对cpu统计时间
interval=10 采样10次
*/
再次运行这段程序显示如下图:
这时候还发现在工程目录里面,多了一个文本文件java.hprof.txt,如下图所示:
内容如下:
CPU TIME (ms) BEGIN (total = 11542) Fri Jul 22 11:00:34 2016
rank self accum count trace method
1 86.65% 86.65% 1 303422 com.test.HProfTest.slowerMethod
2 8.66% 95.31% 1 303423 com.test.HProfTest.slowMethod
3 0.25% 95.56% 36 300745 java.util.zip.ZipFile.<init>
4 0.20% 95.76% 36 300434 java
原文转自:http://www.jianshu.com/p/6df2963fe94e