【问题标题】:Arrays.fill() performanceArrays.fill() 性能
【发布时间】:2018-03-09 07:20:31
【问题描述】:

我有一个调谐器应用程序,并且在后台进行大量计算。 我注意到我在计算时经常进行垃圾收集。我已经更换了:

float someBigArray = new float[bigNumber];

带全局数组:

 if (someBigArray == null) {
        someBigArray = new float[bigNumber];
    } else {
        Arrays.fill(someBigArray , 0f);
    }

在计算 FFT 时使用此数组,这称为每秒多次。 我已经摆脱了频繁的垃圾收集,但我不确定它是否是更有效的解决方案。也许有更好的主意。

【问题讨论】:

  • 我们可能需要更多背景信息:您的someBigArray 的目的是什么?换句话说:你打算用那个数组做什么?
  • 这个数组在计算 FFT 时使用,这被称为每秒多次。我也编辑了问题。
  • stackoverflow.com/questions/9128737/… -- 这里的示例使用比 Arrays.fill 更高效的解决方案
  • 似乎在现代 Java 运行时中,Arrays.fill 现在由于psy-lob-saw.blogspot.com/2015/04/…而性能更高

标签: java android


【解决方案1】:

它(可能1)比回收一个数组(并重新初始化它)比分配一个新数组快。

你能比重新初始化做得更好吗?可能不是!

但是,如果您每次只使用大数组的一小部分,那么重新初始化整个数组可能会很浪费。 (可能值得跟踪您每次使用了多少数组。)


1 在某些涉及引用数组的场景中,对数组进行 GC 可能比让其由 GC 长期使用更好。例如,对终身数组中新空间对象的引用将导致新对象不被收集到新空间集合中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2011-10-30
    • 2011-10-13
    • 2015-12-18
    • 2013-05-27
    • 2018-11-01
    • 2011-03-11
    相关资源
    最近更新 更多