java中大列表迭代的速度急剧减慢

java中大列表迭代的速度急剧减慢,java,performance,list,jpa,iteration,Java,Performance,List,Jpa,Iteration,我有一个JavaEE项目。 在一个EJB中,我需要迭代一个包含35.000个对象的大列表。 在每个循环中,都有数据库中的比较,并使用JPA和EntityManager进行多次插入或更新 开始时,解析500行(可以接受)大约需要5到7秒,但慢慢地,它的速度变慢了。经过10.000次迭代后,处理500行需要26秒!: 我查看了visualVM,找不到CPU故障或内存泄漏: 我尝试使用“classic”for语句和“for each”Java8流进行迭代,但结果是一样的 为什么会变慢 我会尝试在

我有一个JavaEE项目。 在一个EJB中,我需要迭代一个包含35.000个对象的大列表。 在每个循环中,都有数据库中的比较,并使用JPA和EntityManager进行多次插入或更新

开始时,解析500行(可以接受)大约需要5到7秒,但慢慢地,它的速度变慢了。经过10.000次迭代后,处理500行需要26秒!:

我查看了visualVM,找不到CPU故障或内存泄漏:

我尝试使用“classic”for语句和“for each”Java8流进行迭代,但结果是一样的


为什么会变慢

我会尝试在黑暗中试一试,说数据库可能是你的瓶颈。
插入越多,数据库必须与之比较的条目就越多。因此,完成特定任务所需的时间可能会增加。
在这种情况下,创建表索引也可能是一个问题。 你可能想把你的任务再细分一点,这样你就可以找到真正的瓶颈,但是如果没有进一步的信息,就没有明确的答案