Java:存储大量整数的最佳数据类型是什么?

时间:2016-05-10 21:18:56

标签: java arrays performance integer processing-efficiency

我必须处理大量的小整数,最多1700万(值总是在0-255之间)并将它们存储在某种类型的数组中,我目前正在使用普通的int数组和性能并不是最好的(如预期的那样)。 每次执行的程序访问该数组的所有值大约260次,因此最重要的是通过减少访问数组的所有值所花费的时间来减少执行时间(不使用线程)。

2 个答案:

答案 0 :(得分:1)

您可以使用short数据类型,但这可能不会对性能产生太大影响。如果您有44亿次访问,则需要时间。

你还没有说过“不是最伟大”的表现意味着什么,或者你认为它应该是什么,但我相信你受到问题规模的限制。

由于这个问题感觉像是XY problem,我建议您提出一个新问题并更详细地解释您目标的真实性质。您可能缺少我们只能根据此问题猜测的优化。

答案 1 :(得分:1)

由于您的值适合有符号字节,因此您可以使用byte[]。转换为int看起来就像

int x = a[i] & 255;

因此您将rande -128..127中的值转换为无符号范围。 不要被附加操作吓到,它不会慢于

int x = a[i];

因为两者都会导致内存加载和扩展指令(带有零或符号扩展名)。

通过使用byte[],您可以获得速度,假设它是内存访问会降低您的速度。缓存中有四倍的数据,这可以消除缓存未命中。根据具体的访问模式,您可能会获得一个重要因素或根本没有任何因素:

  • 对于顺序访问,你可能没什么收获,因为内存应该足够快,除非你的计算完全无关紧要
  • 对于纯随机访问,您可能无法获得任何东西,因为您的L3缓存可能小于17 MB
  • 对于访问模式,当附近的数据得到更多处理时,您可能会获得很多收益

鉴于你没有提供任何细节,我只能说。