将List <integer>转换为int [] - Pure Java vs ArrayUtils基准问题</integer>

时间:2013-04-25 10:21:34

标签: java benchmarking

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

似乎ArrayUtils在第一次运行时速度较慢,然后在所有后续运行中都更快,与列表大小无关,并且无论第一次运行时的元素数量是多少。

您可以在此处找到我的测试课程:http://pastebin.com/9EYLZQKV

请帮我勾选它,因为现在我不知道为什么我得到了输出。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要考虑代码中的加载时间和预热。可以先调用内置类,因此可能已加载并预热。

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

BTW从List<Integer>转换为int[]的最快方法是避免首先需要转换。如果您使用TIntArrayList或类似的东西,您可以使用相同的结构而无需复制或转换。