我的PC中的这段代码在Java中执行了1秒钟,而在C语言中执行了超过20秒钟。Java的性能如何?
int a[] = new int[50000] ;
for(int i = 0 ; i < 50000 ; i++) {
for(int j = 0 ; j < 200000 ; j++) a[i] = j - i ;
}
答案 0 :(得分:1)
Java看到您的代码没有执行任何操作,并对其进行了优化以使其更快地执行操作(如注释所示)。当我按原样运行代码时,它将在0.33秒内完成。通过此简单的更改,需要17秒:
public class Test {
public static volatile int b;
public static void main(String[] args) {
int a[] = new int[50000] ;
for(int i = 0 ; i < 50000 ; i++) {
for(int j = 0 ; j < 200000 ; j++) {
a[i] = j - i ;
b = a[i];
}
}
}
}
由于b易变,运行时不再能优化未使用的分配。在我看来,微基准测试几乎没有用,因为实际结果取决于许多不同的事物,但是了解JVM的工作原理总是很不错的!