查看原文
其他

今日代码大赏 | 优雅提取表达式

编程导航-南城余 程序员鱼皮 2024-04-14

程序员在软件开发过程中,很容易有意无意地让代码做一些“重复劳动”。

在大部分情况下,由于计算机的高速运行,这些“重复劳动”并不会对性能构成太大的威胁。

但若希望将系统性能发挥到极致,提取这些“重复劳动”相当有意义。

下面让我们来看一段“重复劳动”的代码:

@Test
public void testExpression(){
    long start = System.currentTimeMillis();
    double d = Math.random();
    double a = Math.random();
    double b = Math.random();
    double e = Math.random();

    double x,y;
    for(int i=0;i<10000000;i++){
        x = d*a*b/3*4*a;
        y = e*a*b/3*4*a;
    }
    long useTime = System.currentTimeMillis()-start;
    System.out.println("useTime:"+useTime);

}

上面这段代码运行结果是:useTime:21

仔细看能发现,两个计算表达式的后半部分完全相同。

这也意味着在每次循环中,相同部分的表达式被重新计算了。

那么改进一下后就变成了下面的样子:

@Test
public void testExpression(){
    long start = System.currentTimeMillis();
    double d = Math.random();
    double a = Math.random();
    double b = Math.random();
    double e = Math.random();

    double p,x,y;
    for(int i=0;i<10000000;i++){
        p = a*b/3*4*a;
        x = d*p;
        y = e*p;
    }
    long useTime = System.currentTimeMillis()-start;
    System.out.println("useTime:"+useTime);
}

上面这段代码运行结果是:useTime:11

通过上面两段代码的运行结果,可以发现性能又提升了一倍。

大家感觉今天的性能优化技巧怎么样?欢迎在评论区留下自己的看法。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问 :https://www.codecopy.cn/post/4pfxtt

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

今日代码大赏 | 位运算代替乘除法

今日代码大赏 | try-catch 优雅使用

今日代码大赏 | Guava 重试

今日代码大赏 | 后端跨域配置

今日代码大赏 | markdown 转纯文本

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存