Утечка памяти с потоком Spring MongoDB? - PullRequest
1 голос
/ 13 июня 2019

Приведенный ниже код вызывает предположительно утечку памяти:

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 где-то содержит ссылку?

Memory footprint

ОБНОВЛЕНИЕ И ИСПРАВЛЕНИЕ:

Итак, по-видимому, я перепутал здесь круглые скобки, должен быть в следующем порядке:

    StreamUtils.createStreamFromIterator(
        mongoTemplate.stream(
            createQuery(reregisterDTO),
            Shipment.class
        )
    ).forEach(shipment -> this.reregisterShipment(shipment, count));

Кредиты на ответ Qingfei Юань ниже.

1 Ответ

1 голос
/ 13 июня 2019

Кажется, вам нужно создать поток с помощью StreamUtils.createStreamFromIterator(Iterator<T>) вместо использования stream напрямую.

Пожалуйста, обратитесь к Поддержка потока Java 8 в MongoTemplate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...