我有一个算法,它目前分配了一个非常大的双精度数组,它经常更新和搜索。数组的大小为 N^2/2,其中 N 是算法运行的行数。为了与围绕算法的应用程序相关的目的,我还必须保留整个内容的副本。
当然,这对我的算法可以处理的行数施加了限制,因为我需要应对堆限制。到目前为止,我已经成功地要求使用该算法的人更新 -Xmx 设置以分配更多空间,并且效果很好。但是,我现在有一个真正的问题,我需要这个数组大于我可以放入内存的大小。
我已经计划改变我的算法以减轻这个大型阵列的必要性,并在该领域取得一些有希望的结果。然而,这是对流程的根本改变,需要做更多的工作才能达到我当前代码的高度抛光状态,该代码在生产中运行非常成功,并且已经运行了好几年。
所以,当我完善我的新算法时,我想延长现有算法的寿命,这意味着解决与分配我的巨大双精度数组相关的堆限制。
我的问题是处理它的最佳方法是什么?我应该使用 nio FileChannel 和 MappedByteBuffer,还是有更好的方法。如果我确实使用 nio 方法,与相同大小的内存数组相比,我应该预期会受到什么样的性能影响?
谢谢