其他
今日代码大赏 | 优雅提取表达式
程序员在软件开发过程中,很容易有意无意地让代码做一些“重复劳动”。
在大部分情况下,由于计算机的高速运行,这些“重复劳动”并不会对性能构成太大的威胁。
但若希望将系统性能发挥到极致,提取这些“重复劳动”相当有意义。
下面让我们来看一段“重复劳动”的代码:
@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 重试
今日代码大赏 | 后端跨域配置