powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [JavaScript] Ассоциативные МАССИВЫ
6 сообщений из 6, страница 1 из 1
[JavaScript] Ассоциативные МАССИВЫ
    #39163631
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем вопрос в след. Node.js

Создаю 2 массива содержащий 2 объекта, причем нумерация индексов в массиве идет через random

Код: javascript
1.
2.
3.
var index = Math.random();
peoples[index] = {...};
peoples2[1] = peoples[index];



Как правильно удалить элемент массива чтобы не было утечек памяти. Если удалять через delete, то элемент массива остается, только не равным объекту. Не создаст ли это утечек памяти?
...
Рейтинг: 0 / 0
[JavaScript] Ассоциативные МАССИВЫ
    #39164294
Фотография бухалтер фантоцци
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В JavaScript любой объект будет жить, пока на него существует хоть одна ссылка...
Если ссылок не остаётся, то сборщик мусора может его удалить, а может и подержать какое-то время в кеше
(на усмотрение среды исполнения, так как много чего может повторно использоваться).

В случае простых типов (Number, String, Boolean) значение копируется непосредственно,
в случае объектов всегда копируется ссылка на объект, по-сути все объекты внутри представляют из себя цепочки ссылок...

так что утечки памяти очень вероятны, если при "удалении" объектов какие-то переменные или поля других объектов
продолжают на них ссылаться.
Код: javascript
1.
2.
3.
4.
5.
var a, b;
a = {one: 1, two: 2};           // Первый объект
b = {one: 1, two: 2, three: a}; // Второй объект - в нём сохраняется ссылка на Первый объект
a = undefined;                 // Первый объект живёт- на него есть ссылка b.three
b = {one: 1, two: 2};          // Третий объект. Перый и Второй будут удалены, потому что на них не осталось ссылок.
...
Рейтинг: 0 / 0
[JavaScript] Ассоциативные МАССИВЫ
    #39164310
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухалтер фантоцциВ JavaScript любой объект будет жить, пока на него существует хоть одна ссылка...
Если ссылок не остаётся, то сборщик мусора может его удалить, а может и подержать какое-то время в кеше
(на усмотрение среды исполнения, так как много чего может повторно использоваться).

В случае простых типов (Number, String, Boolean) значение копируется непосредственно,
в случае объектов всегда копируется ссылка на объект, по-сути все объекты внутри представляют из себя цепочки ссылок...

так что утечки памяти очень вероятны, если при "удалении" объектов какие-то переменные или поля других объектов
продолжают на них ссылаться.
Код: javascript
1.
2.
3.
4.
5.
var a, b;
a = {one: 1, two: 2};           // Первый объект
b = {one: 1, two: 2, three: a}; // Второй объект - в нём сохраняется ссылка на Первый объект
a = undefined;                 // Первый объект живёт- на него есть ссылка b.three
b = {one: 1, two: 2};          // Третий объект. Перый и Второй будут удалены, потому что на них не осталось ссылок.



Это все я прочитал в мануале, но есть одно но.

Когда я создал 100000 таких элементов, а затем удалил их, а далее сравнил память до выполнении операции и после, то оказалось что потребление ее возросло в разы.(использовал стандартную функцию process.memoryUsage() )
...
Рейтинг: 0 / 0
[JavaScript] Ассоциативные МАССИВЫ
    #39164322
Фотография бухалтер фантоцци
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так сборщик мусора не сразу очищает память,
любые браузеры аналогично работают.
...
Рейтинг: 0 / 0
[JavaScript] Ассоциативные МАССИВЫ
    #39164722
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы разделил проблему (вопрос) на 3 части, а то сейчас путаница какая-то:
1. Вызывает ли утечки памяти создание 1000 элементов массива и потом их удаление посредством delete?
2. Если в массиве записан только первый и 158785-ый элемент, то будет ли выделена какая любо память под элементы между ними?
3. В какой момент можно быть уверенным, что используемый объект удалён?

ответы:
1. Нет не вызывает, потому как delete говорит интерпретатору, что о существовании указанной переменной следует забыть. Следующая попытка обращения к ней вернёт undefined, что говорит об "незнании" интерпретатора о ней.

2. Не будет. В javascript все массивы ассоциативны. То есть реализация массива такова, что он не обязан быть непрерывным (как например в паскале). Это вызывает небольшие накладные расходы на запоминание прошлого/следующего элемента и т.д., но не более.

3. Наверное зависит от сборщика мусора. Однако, если бы я такой писал, то удалял бы я объекты в момент удаления последней ссылки на него. После этого хранить его в памяти не имеет ни малейшего смысла, так как к нему обращения невозможны. Однако, учитывая что удаление ссылки на один объект может сделать недоступным сразу 2 десятка сущностей, сборщик вероятно не спешит чистить память при каждом вызове delete, а просто по таймеру проверяет выделенные ему участки памяти и освобождает те, на которые в скрипте больше нету ссылок.
Не думаю что сборщик мусора проводит зачистку раз в 20 минут )) скорее он делает это по несколько раз в секунду.


Потому, тестовый скрипт давал утечку памяти, вероятнее всего, по иной причине (или же написан был не так).

P.S. Если вышеописанное при выполнении вызывает утечку, то, при соблюдении всех изложенных правил, можно смело утверждать, что интерпретатор написан с ошибкой и потому допускает утечки памяти. )) В таком случае это проблема не скрипта, а разработчиков среды.
...
Рейтинг: 0 / 0
[JavaScript] Ассоциативные МАССИВЫ
    #39165141
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухалтер фантоццину так сборщик мусора не сразу очищает память,
да и освободившуюся память не сразу и не всегда отдаёт операционной системе
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [JavaScript] Ассоциативные МАССИВЫ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]