Основными принципами сборки мусора являются поиск объектов данных в программе, к которым нет доступа в будущем, и восстановление ресурсов, используемых этими объектами. https://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29
Преимущества
1) Сохраняет ошибки, возникающие, когда часть памяти освобождается, пока на нее все еще есть указатели, и один из этих указателей разыменовывается. https://en.wikipedia.org/wiki/Dangling_pointer
2) Двойные свободные ошибки, возникающие, когда программа пытается освободить область памяти, которая уже была освобождена и, возможно, уже была выделена снова.
3) Предотвращает некоторые виды утечек памяти, при которых программе не удается освободить память, занятую объектами, которые стали недоступными, что может привести к исчерпанию памяти.
Недостатки
1) Потребление дополнительных ресурсов, влияние на производительность, возможные задержки при выполнении программы и несовместимость с ручным управлением ресурсами.
Сборка мусора использует вычислительные ресурсы при принятии решения о том, какую память освободить, даже если программист уже знал эту информацию.
2) Момент, когда мусор фактически собирается, может быть непредсказуемым, что приводит к остановкам (паузы для перемещения / освобождения памяти), разбросанным по всему сеансу. Непредсказуемые задержки могут быть неприемлемы в средах реального времени, при обработке транзакций или в интерактивных программах.
Руководство по Oracle
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
Сборка мусора - это процесс, который определяет, какие объекты используются, а какие нет, и удаляет неиспользуемые объекты.
В таких языках программирования, как C, C ++, выделение и освобождение памяти выполняется вручную.
int * array = new int[size];
processArray(array); //do some work.
delete array; //Free memory
Первый шаг в процессе называется маркировкой. Именно здесь сборщик мусора определяет, какие части памяти используются, а какие нет.
Шаг 2а. Обычное удаление удаляет объекты, на которые нет ссылок, оставляя ссылочные объекты и указатели на свободном месте.
Чтобы повысить производительность, мы хотим удалить не связанные объекты, а также сжать оставшиеся ссылочные объекты. Мы хотим сохранить ссылочные объекты вместе, чтобы было быстрее выделять новую память.
Как указывалось ранее, маркировка и сжатие всех объектов в JVM неэффективна. По мере того, как все больше и больше объектов распределяется, список объектов растет и увеличивается, что приводит к увеличению времени сбора мусора.
Продолжайте читать этот учебник, и вы узнаете, как GC принимает этот вызов.
Короче говоря, есть три области кучи, YoungGeneration для объектов с коротким сроком службы, OldGeneration для объектов с длительным периодом и PermanentGeneration для объектов, которые живут в течение жизни приложения, например, классы, библиотеки.