Недоступная память
Эта статья нуждается в дополнительных цитатах для проверки . ( октябрь 2015 г. ) |
В компьютерном программировании недоступная память — это блок , динамически выделяемой памяти где у программы , выделившей память, больше нет доступного указателя , ссылающегося на него. Аналогично, недостижимый объект — это динамически выделенный объект , не имеющий на него доступной ссылки . Неформально, недоступная память — это динамическая память , к которой программа не может обратиться напрямую или добраться до нее, начиная с объекта, к которому она может обратиться напрямую, а затем следуя по цепочке ссылок на указатели.
В реализациях динамического распределения памяти, использующих сборщик мусора , объекты удаляются после того, как они становятся недоступными. Сборщик мусора может определить, доступен ли объект; любой объект, который больше не доступен, может быть освобожден . Многие языки программирования (например, Java , C# , D , Dylan , Julia ) используют автоматическую сборку мусора.
Напротив, когда память становится недоступной в реализациях динамического распределения памяти, требующих явного освобождения, память больше не может быть явно освобождена. Недоступная память в системах, использующих ручное управление памятью, приводит к утечке памяти .
Некоторые сборщики мусора реализуют слабые ссылки . Если объект доступен только через слабые ссылки или цепочки ссылок, включающие слабую ссылку, то объект называется слабо достижимо . Сборщик мусора может рассматривать слабо достижимый граф объектов как недостижимый и освободить его. (И наоборот, ссылки, которые предотвращают сбор мусора для объекта, называются сильными ссылками ; слабо достижимый объект недоступен для любой цепочки, состоящей только из сильных ссылок.) Некоторые объектно-ориентированные языки со сборкой мусора, такие как Java и Python , имеют слабые ссылки. ссылки. Пакет Java java.lang.ref
поддерживает мягкие, слабые и фантомные ссылки, что приводит к дополнительным состояниям достижимости объекта soft достижимым и фантомным достижимым .
Недоступная память (в таких языках, как C, которые не освобождаются) часто связана со старением программного обеспечения .
Внешние ссылки
[ редактировать ]- Николас, Итан (4 мая 2006 г.). «Понимание слабых ссылок» . java.net. Архивировано из оригинала 19 августа 2010 года . Проверено 1 октября 2010 г.