我对Java优化有一点疑问。 我有一个代码:
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String[] args) {
int testCount = 1_000_000;
test(testCount);
test(testCount);
test(testCount);
}
public static void test(int test) {
List list = new LinkedList();
long start = System.currentTimeMillis();
for (int i = 0; i< test; i++) {
list.add(0, i);
}
long finish = System.currentTimeMillis();
System.out.println("time " + (finish-start));
}
}
此测试的每次下一次迭代都比之前的要少得多。
time 2443
time 924
time 143
你能帮我理解为什么会这样吗?
答案 0 :(得分:1)
问题实际上是Java有一个启动阶段。在很短的时间之后,代码实际上真的很快。这就是为什么第一次执行函数调用持续时间最长。当执行多个调用时,您将看到在前几次迭代后执行时间将更加稳定。
答案 1 :(得分:1)
您正在体验预热JVM并在各种性能优化中发挥作用的过程,包括内联。
答案 2 :(得分:0)
为什么每次Java测试都会更快?
你甚至不能说:用Java进行测试每次都会更快因为它不正确,只需再测试一次(即见this demo)所以你不能这样做询问不正确陈述的原因。
执行Java程序的时间取决于许多其他条件,即CPU,RAM,OS等的情况,当然time of execution
specific code
可能是is different each time
但是{{ 1}}。