Я столкнулся со сложными проблемами с памятью в своем собственном приложении.Я хочу решить проблему утечки памяти, поэтому вместо создания слишком большого количества объектов и массивов я хочу повторно использовать последнюю выделенную память (используя пул объектов и массивов).
В одном из моих сценариев яхотите сместить ячейки выделенного массива вправо на определенную длину.Для этого я реализую следующее простое решение:
private void shiftRight(int length) {
for (int index = size + length - 1; index >= length; index--) {
bytes[index] = bytes[index - length];
}
}
В процессе поиска этой проблемы в Google я обнаружил, что могу использовать System.arraycopy
вместо своего простого решения.
System.arraycopy(bytes, 0, bytes, length, size);
Но меня беспокоит производительность System.arraycopy
.Как упомянуто в документации этого метода:
Если аргументы src и dest ссылаются на один и тот же объект массива, то копирование выполняется так, как если бы компоненты в позициях srcPos через srcPos + length-1 былисначала копируется во временный массив с компонентами длины, а затем содержимое временного массива копируется в позиции destPos через destPos + length-1 массива назначения.
Этот метод использует для копирования временный массивот SRC до Dest.Я думаю, что этот метод вызывает новую проблему с производительностью, создавая слишком много массивов в системах с высокими транзакциями.
Не могли бы вы обсудить эти два решения?
Заранее спасибо.