以下代码可能导致内存泄漏:
public int reregister(ReregisterDTO reregisterDTO) {
AtomicInteger count = new AtomicInteger(0);
StreamUtils.createStreamFromIterator(
mongoTemplate
.stream(createQuery(reregisterDTO), Shipment.class))
.forEach(shipment -> this.reregisterShipment(shipment, count)
);
return count.get();
}
它已从数据库中获取了20000个实体,但似乎未释放内存。 随着更大的卷,JVM完全耗尽了内存。 如何释放内存并避免使用它?可能是底层的srping-mongodb代码在某处保存了引用吗?
更新和修复:
显然,我在这里混入了括号,必须按以下顺序排列:
StreamUtils.createStreamFromIterator(
mongoTemplate.stream(
createQuery(reregisterDTO),
Shipment.class
)
).forEach(shipment -> this.reregisterShipment(shipment, count));
以下是对袁庆飞的回答的信。
答案 0 :(得分:1)
似乎您需要通过StreamUtils.createStreamFromIterator(Iterator<T>)
创建流,而不是直接使用stream
。