下面的代码分别调用两个简单的函数100亿次.
public class PerfTest {
private static long l = 0;
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b");
long time1 = System.currentTimeMillis();
for (long i = 0; i < 1E10; i++) {
func1("a", "b");
}
long time2 = System.currentTimeMillis();
for (long i = 0; i < 1E10; i++) {
func2(list);
}
System.out.println((time2 - time1) + "/" + (System.currentTimeMillis() - time2));
}
private static void func1(String s1, String s2) { l++; }
private static void func2(List<String> sl) …Run Code Online (Sandbox Code Playgroud) 我试图在Java中测试自动装箱和拆箱的速度,但是当我尝试将它与原语上的空循环进行比较时,我注意到了一个奇怪的事情.这个片段:
for (int j = 0; j < 10; j++) {
long t = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++)
;
t = System.currentTimeMillis() - t;
System.out.print(t + " ");
}
Run Code Online (Sandbox Code Playgroud)
每次我运行它,它返回相同的结果:
6 7 0 0 0 0 0 0 0 0
为什么前两个循环总是需要一些时间,其余的似乎被系统跳过?
在这篇文章的答案中,据说Just-In-Time编译将能够优化这一点.但如果是这样,为什么前两个循环还需要一些时间?