如何比较两个 .toString() 方法的性能?

软件测试 爪哇 表现
2022-01-09 20:58:01

假设我想将 Java 的性能StringBuilder.toString()与 newString(char[])字符串的长度从 1 到 3000 个字符进行比较。我事先知道生成的字符串有多长。我应该尝试每个长度多少次,如何将结果收集到可用信息中?我最感兴趣的是执行时间,但如果有任何内存使用怪癖,我也想知道它们。

2个回答

你没有说你需要多少精度——你只是想知道哪个更快,还是你想知道多快

以下是一些干扰此类基准的因素:

  • 时钟粒度。我假设您将使用某些东西(System.currentTimeMillis、System.nanotime() 或秒表等)来测量时间间隔。粒度越粗,需要采集的样本越多。如果这是您测量中唯一的混杂因素(不是),您可以从所需的粒度和精度中得出样本大小。
  • JVM 行为。Hotspot 编译器将根据使用频率在字节码和机器码之间转换代码路径。优化器在转换代码之前必须观察一段时间。如果您的基准测试结束得太快,您将错过优化。
  • 机器上的其他活动。除了基准测试之外,计算机上还有其他运行的东西。

无论如何,我建议凭经验弄清楚。编写样本大小为 N 的基准并写下结果。重复 N 的较大倍数,例如 1000、10000、1000000 等,直到结果收敛到您需要的精度。

您可以使用像Caliper这样的微基准测试框架