Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MongoDB流内存泄漏?_Java_Spring_Java Stream_Spring Mongodb - Fatal编程技术网

Java Spring MongoDB流内存泄漏?

Java Spring MongoDB流内存泄漏?,java,spring,java-stream,spring-mongodb,Java,Spring,Java Stream,Spring Mongodb,以下代码可能导致内存泄漏: public int reregister(ReregisterDTO reregisterDTO) { AtomicInteger count = new AtomicInteger(0); StreamUtils.createStreamFromIterator( mongoTemplate .stream(createQuery(reregisterDTO), Shipment.class))

以下代码可能导致内存泄漏:

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(迭代器)
创建流,而不是直接使用
stream


请参阅

哦,天哪,显然是个愚蠢的错误。forEach(装运->此。重新注册装运(装运,计数)必须在StreamUtils.createStreamFromIterator()之后!感谢您指出这一点!