Почему мне нужно сборщика мусора, а не способ бесплатно(), если она не освобождает память, как требуется?
Потому что ваше определение «необходимо» и то, что, по мнению JVM, «необходимо», - это две разные вещи. JVM только нуждается в, чтобы освободить память, если ему нужно выделить что-то еще и не имеет свободного места для создания новых объектов. Ни в коем случае это действительно .
Сбор мусора - это сделать вашу жизнь проще программиста, потому что намного легче избежать утечек памяти, когда вам не нужно делать все подсчет ссылок, необходимый для правильного освобождения пространства, которое вы выделили. И это означает, что количество ошибок больше. Но сборка мусора - сложный процесс, который требует вычислительных ресурсов, и поэтому он не активируется, пока JVM не оценит, что это стоит усилий. (Фактически, решения сложны, поскольку существуют небольшие и крупные сборки мусора и разные области кучи, которые освобождаются с использованием разных соображений).
Ваша программа не будет выделять все больше и больше памяти, пока она не взорвется (если у вас нет утечки памяти). У меня есть Java-программы, работающие в течение нескольких месяцев без остановки, и они не взрываются, несмотря на то, что иногда создают миллионы объектов в минуту. Когда это потребуется, он запустит сборщик мусора. Ваша вера в то, что это должно произойти как можно скорее, необоснованно.
Обратите внимание, что работа с сборкой мусора не означает, что Java обязательно возвращает память в операционную систему. Он обычно сохраняет это для себя, если вы захотите выделить больше объектов. У него есть некоторые параметры настройки, которые сообщают ему, когда возвращать память в операционную систему, и она справляется с этими параметрами после запуска сборки мусора. Пожалуйста, прочитайте tuning guide, если вы заинтересованы.
Слово, которое вы ищете: * Мусор *. ... И GC работает, читайте об этом немного больше. Minor/Major GC, что вам нужно, чтобы обойтись без него и т. Д. –
Обратите внимание, что ни 'free()', ни 'delete' не гарантирует, что память будет возвращена операционной системе. Назначение 'free',' delete' или сборка мусора - это позволить памяти, которая использовалась одним объектом для повторного использования другим объектом.Java-GC выполняет эту задачу. – ruakh
@RealSkeptic Я хотел сделать это более реалистичным :). – crAlexander