【发布时间】:2019-03-28 11:02:27
【问题描述】:
有谁知道为什么我在 Java 8 和 Java 11 上运行此代码时会获得如此不同的性能?
在不使用任何运行时标志的情况下,与 Java 8 相比,此代码在 Java 11 下的运行速度明显慢得多。
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 上对此进行了测试,因此它在其他操作系统上的行为可能会有所不同。
【问题讨论】:
-
问题真的存在吗??你的数据是什么
-
几乎只使用 Java 十多年了,我刚刚了解到您可以在 int 文字中添加下划线... mindblast
-
@Alex 你怎么不提供你的输出?你说“明显慢”但什么是重要的?程序有输出吗?
-
@Alex 你用过 JMH。请使用它,它会预热你的 JVM 等等。
标签: java string performance concatenation