在我自己的应用程序中,我面临着具有挑战性的内存问题。我想解决内存泄漏问题,所以我不想创建太多的对象和数组,而是重用最后分配的内存量(使用对象和数组池)。
在我的一个场景中,我希望将分配数组的单元格移到特定长度的右边。为此,我实现了以下简单解决方案:
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的性能。如这一方法的文件所述:
如果src和dest参数引用相同的数组对象,则执行复制,就像通过srcPos+ length -1在srcPos位置上的组件首先被复制到具有长度组件的临时数组中一样,然后将临时数组的内容通过目的数组的destPos复制到destPos位置。
此方法使用临时数组从src复制到dest。我认为这种方法会在高事务系统中创建过多的数组,从而导致新的性能问题。
你能谈谈这两种解决方案吗?
提前谢谢。
发布于 2019-06-19 12:40:26
句子中的关键词是“好像”。它实际上不使用临时数组。描述只是简单地说,它的工作就好像有一个(换句话说,它不会覆盖它不应该覆盖的东西)。
您可能希望比较一下System.arraycopy与for循环的性能,因为我在某个地方看到,对于短数组,for循环可能更快。
https://stackoverflow.com/questions/56667350
复制相似问题