有人知道为什么我在Java 8和Java 11上运行此代码时性能差异如此之大吗?
在不使用任何运行时标志的情况下,似乎这段代码在Java 11下运行比Java 8慢得多。
import java.util.Date;
public class PerformanceExperiment {
public static volatile String s = "";
public static void main(String[] args)
{
System.out.println("Starting performance test");
String s1 = "STRING ONE";
String s2 = "STRING TWO";
long now1 = (new Date()).getTime();
for (long i = 0; i < 1_000_000_00; i++)
{
s = "abc " + s1 + " def " + s2;
}
long now2 = (new Date()).getTime();
System.out.println("initial block took " + (now2 - now1) + "ms");
for (long i = 0; i < 4_000_000_00; i++)
{
s = "abc " + s1 + " def " + s2;
}
long now3 = (new Date()).getTime();
System.out.println("Main block took " + (now3 - now2) + "ms");
}
}
我尝试了很多命令行标志,但都没有达到Java 8的性能水平。
我只在Windows上测试过,可能在其他操作系统上表现不同。