【java】JETM--Java™的执行时间测量库简单学习(一)

来源:互联网 发布:数据库系统原理怎么学 编辑:程序博客网 时间:2024/05/18 02:02
一、下载

        用途:测试Java™应用程序潜在的性能问题

学习目的:帮助记录某程序运行过程中各个具体方法调用的次数及时间(最大值,最小值,平均值,总值),帮助大家找到程序执
                    行过程中的瓶颈

下载地址:http://jetm.void.fm/files.html

下载版本: jetm-1.2.3.zip 或 下载 jetm-samples-1.2.3.zip(其中有两个例子可用于学习)

        引入:解压,将jar包添加并引入项目中


二、示例代码:
/** * 执行j从零至一百的循环递加,且当j为是的整数倍时调用方法LessJ(int j)LessJ(int j)--- 执行i * >0的递减,使用JETM目的执行程序得到两个函数调用的次数及时间 * @author rwq */public class JETMTest {    private static EtmMonitor monitor;    private static void setup() {        BasicEtmConfigurator.configure();        // BasicEtmConfigurator.configure(true);        // BasicEtmConfigurator.configure(true,new DefaultTimer());        monitor = EtmManager.getEtmMonitor();        monitor.start();    }    private static void tearDown() {        monitor.stop();    }    public static void main(String[] args) {        setup();        EtmPoint point = monitor.createPoint("00_JETMTest_main");        AddNumber add = new AddNumber();        add.addHun();        add.lessJ(10);        point.collect();        monitor.render(new SimpleTextRenderer());        tearDown();    }}class AddNumber {    private static final EtmMonitor etmMonitor = EtmManager.getEtmMonitor();    void addHun() {        // 数字序号_阶段名称_功能        EtmPoint point = etmMonitor.createPoint("01_AddNumber_addHun");        try {            int j = 0;            for (int i = 0; i < 100; i++) {                lessJ(j);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            point.collect();        }    }    void lessJ(int j) {        EtmPoint point = etmMonitor.createPoint("02_AddNumber_lessJ");        try {            int i = j;            for (; i > 0;) {                i--;            }        } catch (Exception e) {            e.printStackTrace();        } finally {            point.collect();        }    }}

代码说明:
方法:
addHum()---执行j从零至一百的循环递加,且当j为是的整数倍时调用方法LessJ(int j)
LessJ(int j)--- 执行i >0的递减

目的:使用JETM目的执行程序得到函数调用的次数及时间


三、控制台执行效果

(执行点,执行次数,平均时间,最小时间,最大时间,总时间)
BasicEtmConfigurator.configure();方式结果如下

BasicEtmConfigurator.configure(true);方法结果如下

四、理解

1.需测函数中构造变量point:EtmPoint point = etmMonitor.createPoint("01_AddNumber_addHun"); .变量命名point 要有意义或者有顺序,一般规则是:数字序号_阶段名称_功能(见下图效果显示),数字序号可以层层增加如第一层01,JETM的结果中point是有顺序的

2.要在方法结束时调用point.collect(); ---用以收集结果

3.主函数中也要收集总共用时

4、Setup():指明记录方式,初始化变量,设置monitor.start(); 开始时调用(命名为JETMsetup更确切)

5、BasicEtmConfigurator.configure();---指明记录方式,如下

      BasicEtmConfigurator.configure();----  只记录总共调用
      BasicEtmConfigurator.configure(true);----记录循环调用,以及单独调用
      BasicEtmConfigurator.configure(true, new DefaultTimer());   ----以一定时间方式

6、tearDown() :monitor.stop();  结束时必须关闭(命名为JETMtearDown更确切)

7、monitor.render(new SimpleTextRenderer()): 可视化结果


五、感悟
可以在整个程序运行过程中记录:用了什么方法, 用了多少次, 执行的时间 ,记录一个方法运行时间,找到运行慢的方法,也可以找到无用的方法

六、学习网址:

http://jetm.void.fm/doc.html

原创粉丝点击