русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сборка мусора


Дата добавления: 2015-07-09; просмотров: 494; Нарушение авторских прав


 

Ссылочные типы не имеют фиксированного размера; в самом деле, некоторые из них могут быть очень большими. Мы уже говорили о том, что переменные не со_ держат непосредственных значений ссылочного типа. Значения хранятся в ка_ ком_либо другом месте, а в переменных находится только ссылка на это местопо_ ложение. А сейчас кратко остановимся на реальном хранении значений.

 

Поскольку строки, объекты и массивы не имеют фиксированного размера, место для их хранения должно выделяться динамически, когда становится известен размер. Когда JavaScript_программа создает строку, массив или объект, интерпре_ татор должен выделить память для хранения этой сущности. Память, выделяемая подобным образом, должна быть впоследствии освобождена, иначе интерпретатор JavaScript исчерпает всю доступную память, что приведет к отказу системы.

 

В таких языках, как C и C++, память приходится освобождать вручную. Именно программист отвечает за отслеживание всех создаваемых объектов и, когда они больше не требуются, – за их ликвидацию (освобождение памяти). Это бывает довольно обременительно и часто приводит к ошибкам.1

 

В JavaScript, где не надо вручную освобождать память, реализована технология, называемая сборкой мусора (garbage collection). Интерпретатор JavaScript мо_ жет обнаружить, что объект никогда более не будет использоваться программой. Определив, что объект недоступен (т. е. больше нет способа получения ссылки на него), интерпретатор выясняет, что объект более не нужен, и занятая им па_ мять может быть освобождена.2 Рассмотрим следующие строки кода:

var s = "hello"; // Выделяем память для строки
var u = s.toUpperCase(); // Создаем новую строку  
s = u; // Переписываем ссылку на первоначальную строку

 



После работы этого кода исходная строка "hello" больше недоступна – ни в одной из переменных программы нет ссылки на нее. Система определяет этот факт и освобождает память.

1 Это не совсем строго: для локальных (объявленных в функции) переменных, раз_ мещаемых в стеке, какой бы сложной структуры ни были переменные, автомати_ чески вызывается деструктор и производится освобождение памяти. Точно так же ведут себя контейнеры STL, или «собственные данные потока». Утверждение автора в абсолютной степени относится только к объектам, динамически распре_ деляемым операторами new и delete. – Примеч. науч. ред.

 

2 Описываемая схема сборки мусора, известная как «подсчет числа ссылок», может иметь серьезные проблемы в более сложных программах при появлении объектов

с циклическими ссылками – объекты никогда не будут освобождены. Эта проблема хорошо изучена в Perl; способы борьбы см. в описании языка. – Примеч. науч. ред.


 

74 Глава 4. Переменные

Сборка мусора выполняется автоматически и невидима для программиста. О сборке мусора он должен знать ровно столько, сколько ему требуется, чтобы доверять ее работе, – он не должен думать, куда делись все старые объекты.

 



<== предыдущая лекция | следующая лекция ==>
 | Глобальный объект


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.141 сек.