URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4186
[ Назад ]

Исходное сообщение
"Как освободить память в JavaScript"

Отправлено chainik , 26-Июн-06 11:11 
Допустим, я создал очень длинный объект
textnodeText = document.createTextNode('Мой текст');
Как мне освободить занимаемую им память (на самом деле заставить браузер освободить занимаемую этим объектом память), когда по моему замыслу javascript-программа сочтет этот объект более ненужным?

Содержание

Сообщения в этом обсуждении
"Как освободить память в JavaScript"
Отправлено XAnder , 26-Июн-06 12:00 
>Допустим, я создал очень длинный объект
>textnodeText = document.createTextNode('Мой текст');
>Как мне освободить занимаемую им память (на самом деле заставить браузер освободить
>занимаемую этим объектом память), когда по моему замыслу javascript-программа сочтет этот
>объект более ненужным?

Движок JavaScript сочтет этот объект ненужным тогда, когда на него не останется ни одной ссылки. Это называется сбором мусора. В принципе, можно не беспокоится о высвобождении памяти - эта задача решается автоматически. Если вдруг понадобится форсировать события, нужно просто установить все указатели на этот объект в null.


"Как освободить память в JavaScript"
Отправлено chainik , 26-Июн-06 12:15 
>>Допустим, я создал очень длинный объект
>>textnodeText = document.createTextNode('Мой текст');
>>Как мне освободить занимаемую им память (на самом деле заставить браузер освободить
>>занимаемую этим объектом память), когда по моему замыслу javascript-программа сочтет этот
>>объект более ненужным?
>
>Движок JavaScript сочтет этот объект ненужным тогда, когда на него не останется
>ни одной ссылки. Это называется сбором мусора. В принципе, можно не
>беспокоится о высвобождении памяти - эта задача решается автоматически. Если вдруг
>понадобится форсировать события, нужно просто установить все указатели на этот объект
>в null.

Прошу прощения за возможное непонимание (привык к c, c++). Указатель в моем примере это textnodeText?

Правильно ли будет освободить память записав
textnodeText = null;
?

Просто я еще не совсем осознал, что такое указатель в java.
Например, если бы в C была объявлена переменная X,
то указатель на нее можно было бы получить как
<type of X> *pX = &X;
А как в java я не знаю. Хотелось бы узнать.


"Как освободить память в JavaScript"
Отправлено XAnder , 26-Июн-06 14:53 
>Прошу прощения за возможное непонимание (привык к c, c++). Указатель в моем
>примере это textnodeText?

Да. Вообще в JavaScript все переменные - это ссылки (указатели) на объекты.

>Правильно ли будет освободить память записав
>textnodeText = null;

Если нет других переменных, указывающих на этот объект, то почти правильно. "Почти", потому что на самом деле память будет освобождена только при следующем сборе мусора. Под "мусором" понимаются те объекты, до которых уже нельзя "добраться" из программы по ссылкам. В какие моменты выполняется сбор мусора, зависит от реализации.

Вообще, вся эта петрушка со сборщиком мусора придумана для того, чтобы программист не забивал себе голову освобождением памяти.

>Просто я еще не совсем осознал, что такое указатель в java.

Java и JavaScript - это совершенно разные языки. Путать их нельзя ни в коем разе!

А насчет указателей (ссылок) все предельно ясно: всякая переменная (даже числовая) есть ссылка на объект.

Не устаю рекомендовать к прочтению замечательные "Наблы" Дмитрия Котерова (http://dklab.ru/chicken/nablas/) - там автор простым и понятным языком объясняет и про сбор мусора, и про "хитрости JavaScript" и много чего еще полезного.


"Как освободить память в JavaScript"
Отправлено chainik , 26-Июн-06 16:58 
>Не устаю рекомендовать к прочтению замечательные "Наблы" Дмитрия Котерова (http://dklab.ru/chicken/nablas/) - там
>автор простым и понятным языком объясняет и про сбор мусора, и
>про "хитрости JavaScript" и много чего еще полезного.

Спасибо. Добавил в свои закладки.


"Как освободить память в JavaScript"
Отправлено lfway , 17-Мрт-09 17:26 
спасибо за ссылку http://dklab.ru/chicken/nablas/