首页 > 其他分享 >trycatch性能问题记录

trycatch性能问题记录

时间:2022-10-27 17:25:55浏览次数:62  
标签:记录 int 性能 循环 trycatch 日志 异常 捕获

在一次处理系统上的性能问题上,发现去掉trycatch块之后,性能提示巨大,所以写了一个demo进行测试

测试环境中分别设置

1.只有循环不捕获异常,

 private void trycatchtest1(int num){
        for (int i = 0; i < num; i++) {
            int a = 1==0?1:0;
        }
    }

 

2.循环中trycatch并输出日志(有异常),

private void trycatchtest2(int num){
        for (int i = 0; i < num; i++) {
            try {
                int a = 1/0;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

 

3.不循环的trycatch(有异常),

 private void trycatchtest3(int num){

        try {
            for (int i = 0; i < num; i++) {
                int a = 1/0;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

4.循环中trycatch不输出日志,

private void trycatchtest4(int num){
        for (int i = 0; i < num; i++) {
            try {
                int a = 1/0;
            } catch (Exception e) {
//                e.printStackTrace();
            }
        }
    }

 

5.循环trycatch并输出日志(无异常)

 private void trycatchtest5(int num){
        for (int i = 0; i < num; i++) {
            try {
                int a = 1;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

 

 

设置不同的循环次数

1.设置1000次循环的结果

1000简单的循环:0
1000循环trycatch捕获并抛出异常:78
1000trycatch捕获并抛出异常:0
1000循环trycatch捕获不抛出异常:5
1000循环trycatch捕获不到异常:1

 

2.设置100000次循环

100000简单的循环:1
100000循环trycatch捕获并输出日志:3040
100000trycatch捕获并输出日志:0
100000循环trycatch捕获不输出日志:208
100000循环trycatch捕获不到异常:1

 

3.设置10000000次循环

10000000简单的循环:4
10000000循环trycatch捕获并输出日志:140000
10000000trycatch捕获并输出日志:0
10000000循环trycatch捕获不输出日志:340
10000000循环trycatch捕获不到异常:3

 

总结

从测试结果可以看出来,简单的循环、一次的trycatch、循环中trycatch但是无异常的情况下耗时影响不大

但是在循环中trycatch并捕获到异常时,耗时较长,其中不输出日志的相对少一点,输出日志的耗时特别长

如果不抛异常的话,其实性能是没多少影响的,或者说性能的影响微乎其微,几乎可以忽略不计。

但是,如果抛异常了,这就会造成很大的性能影响。当抛异常的时候,需要去生成一个栈跟踪(stack track),

这个主要是描述异常的相关信息,比如会对当时栈进行快照,记录栈帧所指向的类名,方法名,

以及在哪一行代码上抛出的异常信息等等,这就是用异常捕获耗时的地方了。

因此,在实际开发过程中,要适当捕获异常,而且仅捕获有必要的代码段。

建议

1.在能预知到会出现的异常,尽量不使用trycatch

2.不用在循环很多次的方法里使用trycatch并输出日志

 

原理还没时间寻找,后续继续更新吧

 

标签:记录,int,性能,循环,trycatch,日志,异常,捕获
From: https://www.cnblogs.com/charleyyxc/p/16832955.html

相关文章