Я давно не читал книгу о Java. Недавно я прочитал «Язык программирования Java» Джеймса Гослинга >> и сделал несколько заметок о чтении. Эта часть о переработке мусора.
1. Утилизация мусора
Объекты создаются с использованием новой, но нет соответствующей операции удаления для переработки памяти, занятой объектом. Когда мы завершаем использование объекта, нам просто нужно остановить ссылку на этот объект:
-> Измените ссылку на то, чтобы указать на другой объект
-> Укажите ссылку на NULL
-> вернуть из метода, чтобы локальные переменные метода больше не существовали
Ключевые моменты:
-> Когда мы не можем добраться до объекта из любого исполняемого кода, пространство, которое он занимает, может быть переработано.
-> Утилизация мусора означает, что нам никогда не приходится беспокоиться о висящих ссылках. Неверно ссылка относится к ссылке на пространство памяти, которое было удалено. Эта проблема существует в системах, где программисты могут напрямую контролировать, когда объекты удаляются.
-> Модель коллекционера мусора: метод справочного счетчика (не может решить круговую ссылку), Mark и Sweep.
2. Резюме
Завершить метод
-> После того, как сборщик мусора определит, что объект недоступен и что пространство объекта будет переработано, сборщик мусора назвал бы этот метод.
-> Этот метод может очистить все ресурсы, не имеющие памяти, используемые объектом, и может быть вызван только один раз для каждого объекта. Даже если выполнение этого метода делает объект снова доступным снова, а затем сразу же снова становится недоступным, метод может быть вызван только один раз.
Метод -> «Окончания» может быть вызван в любой конкретный период времени, и его никогда не могут быть вызваны (виртуальная машина Java заканчивается).
Переопределить метод завершения
-> Когда объект становится мусором, другие объекты, к которым он ссылается, также могут стать мусором. Этот мусор, возможно, был прекращен до того, как вызовут метод завершения, который мы написали, поэтому они могут быть в непредсказуемом состоянии.
-> Перезаписать метод окончания -добавить метод Super.finalize. Лучше всего добавить его в последнее предложение. Убедитесь, что некоторые из контента, объявленных в его суперклассе, также могут быть прекращены.
Iii. Связанные классы и методы взаимодействия с коллекторами мусора
Класс: Runtime.getRuntime (), System
Методы: gc (), runfinalization (), freememory (), totalmemory (), maxmemory ()
Системный класс поддерживает методы static gc () и runfinalization (), которые будут вызывать соответствующие методы на текущем объекте времени выполнения.
IV Состояние доступности и эталонные объекты
Объект может быть собран только мусором, только если ссылка не указывает его, но иногда мы можем захотеть собрать объект как мусор, когда все еще есть выбранная ссылка, указывающая на объект.
Единственная цель эталонного объекта - поддерживать ссылку на другой объект, называемый ссылкой. Обычно мы поддерживаем ссылки на объекты через поля или локальные переменные, но теперь мы можем поддерживать прямые ссылки на эталонные объекты, которые завершают объект, который нам действительно нужен. Коллекционер мусора может определить, ссылается ли остаточная ссылка на объект на объект через лицо опорного объекта, поэтому он может решить, следует ли перерабатывать объект. Сила эталонного объекта будет определять поведение коллектора мусора, а обычные ссылки являются наиболее мощными ссылками.
Справочный класс
-> Пакет: java.lang.ref
-> Типичные методы: get (), clear (), enqueue (), isenqued ()
Сила цитата и доступности
-> Объекты полностью достижимы: обычная ссылка
-> Объект мягко достижим: softreference
-> Объекты слабо доступны: ShandeReference
-> Объекты практически доступны (Phantom достижимый): PhantomReference
-> Объекты недоступны: нет ссылок, когда объект становится слабо доступным (или слабым столбцом), его можно прекратить. Если объект недоступен после прекращения, его можно переработать.
Фаза достижения объекта запускает сборщик мусора для выполнения соответствующего поведения на соответствующих типах эталонных объектов:
-> Мягкие достижимые объекты могут быть разрешены для переработки коллекционером мусора. Мы можем быть уверены в том, что все софтроферы для объектов Softreference будут очищены до того, как бросить ошибку OutofmemoryError.
-> Хорошо доступные объекты будут переработаны сборщиком мусора.
-> Виртуальный достижимый объект не подходит, потому что его ссылочный объект не может быть доступен через PhantomReference, а его метод получения всегда возвращает NULL. Но существование виртуальных ссылок может помешать переработке объектов, прежде чем явно очистить виртуальные ссылки. Виртуальные ссылки позволяют нам обрабатывать объекты, чьи методы завершения были вызваны, что позволяет с уверенностью думать, что они «мертвы».