gpt4 book ai didi

java - System.arraycopy 性能

转载 作者:行者123 更新时间:2023-12-01 19:37:59 25 4
gpt4 key购买 nike

我在自己的应用程序中面临着具有挑战性的内存问题。我想解决内存泄漏问题,因此我不想创建太多对象和数组,而是想重用最后分配的内存(使用对象和数组池)。

在我的一种场景中,我想将已分配数组的单元格向右移动特定长度。为此,我实现了以下简单的解决方案:

private void shiftRight(int length) {
for (int index = size + length - 1; index >= length; index--) {
bytes[index] = bytes[index - length];
}
}

当我用谷歌搜索这个问题时,我发现我可以使用System.arraycopy而不是我的简单解决方案。

System.arraycopy(bytes, 0, bytes, length, size);

但我担心 System.arraycopy 的性能。正如该方法的文档中提到的:

If the src and dest arguments refer to the same array object, then the copying is performed as if the components at positions srcPos through srcPos+length-1 were first copied to a temporary array with length components and then the contents of the temporary array were copied into positions destPos through destPos+length-1 of the destination array.

此方法使用临时数组从 src 复制到 dest。我认为这种方法会在高事务处理系统中创建太多数组,从而导致新的性能问题。

您能讨论一下这两种解决方案吗?

提前致谢。

最佳答案

句子中的关键词是“好像”。它实际上并不使用临时数组。描述只是说它的工作方式就像有一个(换句话说,它不会覆盖不应该覆盖的东西)。

您可能想比较 System.arraycopy 与 for 循环的性能,因为我相信我在某处看到 for 循环对于短数组可能更快。

参见Is Java's System.arraycopy() efficient for small arrays?

关于java - System.arraycopy 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com