System.arraycopy 是内存转移和堆使用的有效方法吗?

C g*_*ics 1 java jvm memory-management

我想要做的是将一个大的字节数组移动到 10 个更高的索引。我知道我可以轻松地这样做:

byte [] bArray = new byte [1000000];
System.arraycopy(bArray, 0 , bArray, 10, 900000 );
Run Code Online (Sandbox Code Playgroud)

然而,在我们的特定代码中,每次调用一个方法时,我们都会这样做,并且该方法将在我们的代码中被调用一百万次。这让我们担心内存泄漏,因为这将在 JVM 上投入大量工作来一次又一次地高频地重新分配堆。

Hot*_*cks 6

System.arraycopy 使用起来非常安全——它不会导致“泄漏”或以某种方式损坏阵列。这也是在 Java 中移动大量数据的最有效方法。

System.arraycopy 与堆管理完全无关——它不分配任何额外的存储。

也就是说,移动大量数据并不是特别高效——它会“弄脏”缓存,导致性能下降。值得考虑不同的设计。