Spring MongoDB 流内存泄漏?

Memory leak with Spring MongoDB stream?

下面的代码可能会导致内存泄漏:

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));

感谢袁庆飞在下方的回答。

看来您需要通过 StreamUtils.createStreamFromIterator(Iterator<T>) 创建流,而不是直接使用 stream

请参考