Метод close() и системные ресурсы

У потоков есть метод close(). Когда я читаю для чего нужен этот метод я встречаюсь с такой формулировкой: "для освобождения системных ресурсов".

Вопрос: а что такое эти "системные ресурсы"? Это память из "кучи"? Если да, то почему следующий код выдает выдаёт не java.lang.OutOfMemoryError, а java.io.FileNotFoundException

import java.io.*;

class Main{
        public static void main(String[] args)
                throws IOException {

                FileInputStream qq;

                while(true){
                        qq = new FileInputStream("qwer.txt");
                }

        }
}

Вывод:

Exception in thread "main" java.io.FileNotFoundException: qwer.txt (Too many open files)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111)
        at Main.main(Main3.java:10)

Ответы (0 шт):