Сегодня я просто возился с 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();
}
У кого-нибудь есть идеи по этому поводу? Что-то мне не хватает?