for 循环性能对比

public class TestFor {
    public static long startTime;
    public static long endTime;
    public static int a = 1;
    public static int b = 1;
    public static int c = 1;
    public static int d;
    public static void main(String[] args) {
//        嵌套循环 --- 性能对比  外小内大  外大内小
        startTime = System.nanoTime();
        for (int i = 0; i < 200000; i++) {
            for (int j = 0; j < 100000; j++) {
                for (int k = 0; k < 10; k++) {

                }
            }
        }
        endTime = System.nanoTime();
        System.out.println("外大内小耗时:"+ (endTime - startTime));

        startTime = System.nanoTime();
        for (int u = 1; u <10 ; u++) {
            for (int y = 1; y < 100000; y++) {
                for (int i = 0; i < 200000; i++) {
                }
            }
        }
        endTime = System.nanoTime();
        System.out.println("外小内大耗时:"+(endTime - startTime));

        System.out.println("-----------隔离----------");

//        2、提取与循环无关的表达式
        startTime = System.nanoTime();
        for (int i = 0; i < 200000; i++) {
            i=i*a*b;
        }
        endTime = System.nanoTime();
        System.out.println("提取前耗时:"+(endTime-startTime));

        startTime = System.nanoTime();
        c = a*b;
        for (int i = 0; i < 200000; i++) {
            i=c*i;
        }
        endTime = System.nanoTime();
        System.out.println("提取后耗时:" + (endTime-startTime));

        System.out.println("-----------隔离----------");

//        3.消除循环终止判断时的方法调用
        ArrayList<String> list = new ArrayList<String>();
        list.add("爱护世界");
        list.add("保护环境");
        list.add("爱护地球");
        list.add("从我做起");
        startTime = System.nanoTime();
        for (int i = 0; i < list.size(); i++) {
        }
        endTime = System.nanoTime();
        System.out.println("消除前:" + (endTime - startTime));

        startTime = System.nanoTime();
        int size = list.size();
        for (int i = 0; i < size; i++) {
        }
        endTime = System.nanoTime();
        System.out.println("消除后:" + (endTime - startTime));

        System.out.println("-----------隔离----------");

//        4、异常捕获
        startTime = System.nanoTime();
        for (int i = 0; i < 10000000; i++) {
            try {
            } catch (Exception e) {
            }
        }
        endTime = System.nanoTime();
        System.out.println("在内部捕获异常耗时:"+(endTime - startTime));

        startTime = System.nanoTime();
        try {
            for (int i = 0; i < 10000000; i++) {
            }
        } catch (Exception e) {
        }
        endTime = System.nanoTime();
        System.out.println("在外部捕获异常耗时:" + (endTime - startTime));

    }
}

结果对比:

外大内小耗时:9415206900
外小内大耗时:13851900
-----------隔离----------
提取前耗时:566800
提取后耗时:787400
-----------隔离----------
消除前:2500
消除后:600
-----------隔离----------
在内部捕获异常耗时:8434800
在外部捕获异常耗时:7284300
 

对于以上第一个结果的理解,就网上说的而已,相当于复制很多小文件和复制很多大文件的区别

对于第二结果的理解,有人测试出提取后出来的是耗时更短,为啥我这样提取出来的时间更长,是因为c=a*b 多了,new了个c耗时长了?

对于第三个结果的理解,优化很明显,第一个是多次循环调用size()方法耗时更长,而第二个只调用了一次size()方法,耗时区别在这里。

对于第四个结果的理解,我也是比较困惑的,有时候,外部耗时比内部耗时高; 大部分时候捕获异常耗时外部比内部的耗时低,多次循环trycatch的区别和只trycatch一次的耗时区别吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值