java 抛异常 效率_Java 代码优化:关于 说“try catch 放在 for/while 循环之外,会提高效率 优化代码”的测试...

在有的文章中,关于Java代码优化有这么一条:

【【不要在循环中使用 try-catch,应该把其放在最外层。】】

我是怀疑的,然后,今天就来实际测试一下。看看是不是真的像这条建议所言,真的有优化效果。不能以讹传讹,假的都成真的啦

使用JProfiler来测试一下,OK,let's go。开始测试;

第一次测试:

package com.lxk.fast;

import com.lxk.model.Dog;

/**

* 据说 try catch 在for循环体中会影响效率,不服来测测。

*

* @author LiXuekai on 2019/7/19

*/

public class TryCatchIsFastInOrOutFor {

private static final int FOR_MAX = 1000;

private static final int FOR_MAX_ = 999;

public static void main(String[] args) {

test();

}

private static void test() {

while (true) {

//testNoException();

testException();

}

}

/**

* 在 try catch 中【会】抛异常

*/

private static void testException() {

out();

in();

}

/**

* 在try catch 中【不会】抛异常

*/

private static void testNoException() {

inNoException();

outNoException();

}

private static void in() {

int i = 0;

while (i < FOR_MAX) {

try {

Dog dog = new Dog();

//确保最后一次抛异常,大家循环次数一致

if (i == FOR_MAX_) {

throw new Exception("xxxxxxxxx");

}

} catch (Exception e) {

}

i++;

}

}

private static void out() {

int i = 0;

try {

while (i < FOR_MAX) {

Dog dog = new Dog();

//确保最后一次抛异常,大家循环次数一致 不能上来就抛异常,那么这个循环次数就比上面少了。

if (i == FOR_MAX_) {

throw new Exception("xxxxxxxxx");

}

i++;

}

} catch (Exception e) {

}

}

private static void outNoException() {

int i = 0;

try {

while (i < FOR_MAX) {

Dog dog = new Dog();

if (i == FOR_MAX_) {

new Exception("xxxxxxxxx");

}

i++;

}

} catch (Exception e) {

}

}

private static void inNoException() {

int i = 0;

while (i < FOR_MAX) {

try {

Dog dog = new Dog();

if (i == FOR_MAX_) {

new Exception("xxxxxxxxx");

}

} catch (Exception e) {

}

i++;

}

}

}

测试效果如下:

ae5b8a35fdc9280b000bca51235665a9.png

代码解释一下:

2个方法的执行次数,咱先保证一致,在最后一次的时候,抛异常,使得测试环境一致,结果才不会太尴尬。

上面测试的是代码在循环的时候真的抛异常啦,在抛异常的情况下,看看效率比。

结果:

发现,结果是差不多的嘛,五五开嘛,差距0.3%,太小了,忽略吧。

第二次测试:

使用第一个方法,走不抛异常的情况下,看看这个try catch 在里面和在外边 有没有太大的差别。

6517d454fc79f94f87543228bd00a4d9.png

结果:

结果对比,差距0.9%,在循环里面的时候,这个Dog在构造对象的时候,多花了0.4%。这是为啥呢?

总的来说:

这2个的差距,并没有可观的性能提升,,,,,SO,

【【不要在循环中使用 try-catch,应该把其放在最外层。】】

这个理论,是扯犊子的嘛,都以讹传讹的,说这个姿势可以优化代码,然后就这么写了,都不带实际测试的,别人说啥就是啥。

还有就是,在这个循环过程中,你要是try catch 写在外边,那么循环里面一旦异常,这个循环就gg了,估计这不是你的意图吧,我既然循环,那肯定是有的是可以成功的,不是说一个异常了,就全完蛋了。不能这么干吧。

所以,再次说明,当初总结这个理论的人,完全是扯犊子的。写在外边,是影响正常代码逻辑的。不OK的。

我反对

标签:Java,MAX,while,private,Dog,try,代码优化,static,catch

来源: https://blog.csdn.net/qq_27093465/article/details/96491466

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值