我想通过在函数开头删除(Object == null)检查来节省时间。我进行了以下四项测试:
String test = null;
String test2 = "Hello";
String test3 = "ASMDAKLSMDKLÖASDJAKLHRFÖKLASJDKLASMDKLASJDMASKLDMASKLÖDMASKLDMASKLÖMDKLÖASMDKASMDKL";
int u, v;
u = 1;
v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test == null) u = v;
}
System.out.println("Test 1: " + (System.currentTimeMillis() - time) + " ms.");
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test2 == null) u = v;
}
System.out.println("Test 2: " + (System.currentTimeMillis() - time) + " ms.");
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test3 == null) u = v;
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
事实证明,大多数情况下,差异在误差范围内。大多数情况下,所有四个函数都需要大约385毫秒才能完成,并且所有函数都在2毫秒内完成,即使是没有比较的函数。
但是,每隔一段时间,也许每四次运行一次,其中一项功能比其他功能要长。这总是测试2,时间总是在570毫秒左右。
任何想法为什么?我理解当我使用计算机时可能会出现性能下降,但它始终处于相同的测试中,并且在这种情况下产生的时间在575的毫秒之内。
在我写这篇文章的时候打我,这个时间恰好是原版的1.5倍。但为什么呢?
答案 0 :(得分:1)
我认为这是循环中访问变量的一些运行时优化的影响。 我在我的机器上运行了以下代码,结果总是一样。
String test = null;
String test2 = "Hello";
String test3 = "ASMDAKLSMDKLÖASDJAKLHRFÖKLASJDKLASMDKLASJDMASKLDMASKLÖDMASKLDMASKLÖMDKLÖASMDKASMDKL";
{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test == null) u = v;
}
System.out.println("Test 1: " + (System.currentTimeMillis() - time) + " ms.");
}
{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test2 == null) u = v;
}
System.out.println("Test 2: " + (System.currentTimeMillis() - time) + " ms.");
}
{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test3 == null) u = v;
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
}
{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
}