0

我最近不得不优化一个高性能系统中的 api 调用,该系统List<Integer>int[]转换做了一些。我最初的发现是,对于我预期的平均元素数量,纯 java 似乎比当前使用的 Apache Commons ArrayUtils 快很多。因子 100-200 甚至我有点惊讶。问题是我一次只对一对转换运行我的测试,为我想要测试的每个元素重新启动我的小测试程序。这样做,对于任何数量的元素,纯 java 的速度要快得多,最多可以达到几个 k,并开始平衡。现在我坐下来编写一个更好的测试程序,该程序一次运行并输出许多不同大小的列表的结果,我的结果完全不同。

似乎 ArrayUtils 只是在第一次运行时较慢,然后在所有后续运行中更快,无论列表大小如何,也不管第一次运行的元素数量如何。

你可以在这里找到我的测试课:http: //pastebin.com/9EYLZQKV

请帮我挑选其中的漏洞,因为现在我不明白为什么我会得到我得到的输出。

非常感谢!

4

1 回答 1

0

您需要在代码中考虑加载时间和预热。内置类可能会首先被调用,因此它可能已经被加载并预热。

一个循环在运行至少 10,000 次之前不会被优化。如果您不知道这是什么时候,我建议您在开始计时之前至少运行代码半秒到两秒。我建议重复测试至少 2 到 10 秒,然后平均结果。

顺便说一句,从 to 转换的最快方法List<Integer>int[]避免一开始就需要转换。如果您使用 TIntArrayList 或类似的东西,您可以使用相同的结构而无需复制或转换。

于 2013-04-25T10:25:24.167 回答