Похоже, что nio .list
возвращает поток, который при потреблении удерживается в одном файловом дескрипторе на каждый итерационный файл, до тех пор, пока .close
не будет вызван во весь поток. Это означает, что каталоги данных с более чем 1000 файлами могут легко обрезать общие значения ulimit
. Общий эффект от накопления дескриптора файла, еще более усугубляется при работе с вложенными обходами.
Что может быть альтернативным способом перебора файлов больших каталогов, кроме перехода на вызовы нереста к команде списка файлов ОС? Было бы здорово, если бы итерации файлов большого каталога, файловый дескриптор поддерживался бы только за текущий итерированный файл, что подразумевалось в правильной семантике потока.
Edit:
list
возвращает поток java из java.nio.file.Path
Какой вызов api будет использоваться для закрытия каждого элемента в потоке после его обработки, а не только при закрытии всего потока для более быстрой итерации? В scala это можно легко запустить с помощью api-оболочки из лучших файлов, в результате чего здесь.