312
также неявным образом – некоторые библиотечные методы создают (при
помощи той же операции new) новый объект и возвращают ссылку на
созданный объект. На этом "заботы" прикладной Java-программы об
управлении памятью заканчиваются. Программа не освобождает
выделенную память, это делает за нее Java ВМ. Автоматическое
освобождение памяти, занимаемой уже ненужными (неиспользуемыми)
объектами, – одна из наиболее интересных особенностей платформы Java.
Это освобождение выполняется в Java ВМ программным механизмом,
который называется сборщиком мусора (garbage collector). Но что такое
неиспользуемый объект? Программа может "оставить объект в покое" на
долгое время, а потом вдруг вновь вернуться к нему. Время обращения к
объекту (как это делается в дисциплине управления памятью LRU) не
может служить показателем ненужности объекта. Сборщик мусора считает
неиспользуемыми те объекты, на которые нет ссылок. Если в программе
нет ссылки на объект, то программа принципиально не может обратиться к
объекту, следовательно, объект представляет собой мусор. Обратите
внимание на то обстоятельство, что при выходе из блока, в котором был
создан объект, освобождается память, занимаемая ссылкой на объект, но
это еще не значит, что объект сразу же становиться мусором. Ссылка на
созданный объект может быть присвоена внешней по отношению к
данному блоку переменной или быть возвращаемым значением метода.
Если же этого не происходит, то объект действительно становится
мусором. При выполнении Java-программы такой мусор в памяти
накапливается. Многие методы библиотечных классов Java (например,
класса String) построены таким образом, что их использование
способствует интенсивному накоплению мусора в памяти.
Когда накопление мусора приводит к нехватке памяти, вступает в
действие сборщик мусора. Для обеспечения работы сборщика мусора в
дескрипторе каждого объекта имеется "признак мусора". При создании