Есть большое кол-во потоков.
На каждый поток выделяется примерно 280 Кб фиксированной памяти (без учёта используемой памяти внутри потока).
После завершения работы, поток завершается и в стеке его больше нет. Но память выделенная на поток (~280Кб) остаётся.
Ещё поясню, я просто в цикле создаю 100 потоков, в которых, в методе run() есть только "sleep(1000)" и всё. Соответственно через 1 сек. поток завершает работу, что видно на скрине, но память выделенная потоку не освобождается.
Как это исправить?
Или это не страшно? И при необходимости память освободится?
Т.е. как я понимаю, память освобождается, но она резервируется и доступна в любой момент текущей программе. Но, что будет если память понадобится другой программе?
UPD:
Но, если в этих же потоках использовать переменные (что я и делаю), то в общем один поток занимает около 400Кб памяти. По завершении работы в потоке, я очищаю переменные. И память занимаемая переменными освобождается и становится доступной ОС, а память занимаемая потоками не доступна ОС.
Т.е. допустим есть 100 потоков, на поток выделяется 280Кб + в потоке используется ещё 120Кб памяти.
В общей сложности все потоки жрут 40 000Кб памяти. После завершения работы потоков, и очистки переменных, занято памяти остаётся 28 000Кб. Т.е. 12 000Кб освободилось и стало доступно ОС, а 28 000Кб всё ещё "используются" программой. P.S. цифры примерные, но смысл думаю понятен. :)
Ну и вот скрин к вышесказанному:
1 - память используемая внутри потоков - освобождается
2 - память выделяемая потокам - не освобождается