В моем коде я запрашивал список из 10 тыс. Элементов, используя findAll из хранилища.
Существует только одна ссылка List
, которой я присваиваю результат findAll
, затем запускаю цикл для элементов List
.
Общее количество записей в БД обычно несколько раз превышает 10 КБ, т. Е. Цикл в настоящее время повторяется где-то между 6 и 12 разами.
Что я заметил, так это то, что последовательная обработка в этом цикле начинает занимать больше времени после примерно 20 000 операций чтения или около того.
Вместо назначения ссылки, если я использую List.addAll()
для findAll
элементов и перед добавлением следующего фрагмента элементов, я очищаю список, используя List.clear()
, тогда время выполнения итерации остается постоянным и не увеличивается последовательно,
Код с увеличением времени итерации,
while(condition){
List<T> reference = repo.findAll()
for(T t:reference){
//Processing
}
//Check Condition if its false
}
Постоянное время,
List<T> reference = new ArrayList<>();
while(condition){
reference.addAll(repo.findAll())
for(T t:reference){
//Processing
}
reference.clear();
//Check Condition if its false
}
Не знаете, почему пробел как объекты также должен собираться мусором в первом случае?
Схожий вопрос - list.clear () vs list = new ArrayList ()