在我的代码中,我一直在使用存储库的findAll查询 10k 个项目的列表。
我只分配了一个List
引用,findAll
然后为 的项目运行一个循环List
。
数据库中的总记录通常是 10K 的几倍,即循环当前迭代 6 到 12 次之间的某处。
我观察到的是,在大约 20K 读取项目之后,该循环中的连续处理开始花费更多时间。
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
}
不知道为什么对象的间隙也应该在第一个实例中被垃圾收集?