Java выполняется 10 000 потоков, но после завершения некоторая память все еще недоступна - почему? - PullRequest
0 голосов
/ 07 августа 2020

Сегодня я просто возился с Threads в Java. После некоторых тестов я решил создать и запустить 10000 потоков и посмотреть, все ли пойдет хорошо или произойдет какое-то неожиданное поведение. Действительно, все прошло go хорошо, но я кое-что заметил.

Я породил 10 000 потоков. Использование моей памяти, как и ожидалось, превышало 1 ГБ. Но после завершения каждого потока использование памяти упало с 1 ГБ до 200 МБ. Таким образом, есть еще ~ 180 МБ памяти, которая, похоже, все еще занята. Но почему так? Каждый поток завершен, я дважды это проверил.

Вот мой тестовый код, который я написал. Программа создаст потоки, подождет 10 секунд, после чего поток должен быть завершен. BufferedReader предназначен для ожидания, поэтому программа не закроется мгновенно.

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

        final long startTime = System.currentTimeMillis();

        for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                public void run() {
                    while (System.currentTimeMillis() - startTime < 10000) {
                        System.out.println(System.currentTimeMillis() - startTime);
                    }
                }
            }).start();
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        reader.readLine();
    }

У кого-нибудь есть идеи по этому поводу? Что-то мне не хватает?

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