Рубрики
Без рубрики

Коллекция мусора в JavaScript

Сегодня мы будем обсудить управление памятью и сборку мусора в JavaScript. Хотя в JavaScript … помечен JavaScript.

Сегодня мы будем обсудить управление памятью и сборку мусора в JavaScript. Несмотря на то, что в JavaScript мы не выполняем никаких операций памяти явно, однако, хорошо знать, как это работает.

На низкоуровневых языках, таких как C, программисты должны вручную выделять и освободить память с использованием Malloc (), Calloc (), Realloc () и Free () методов.

На языках высокого уровня, такими как Java и JavaScript, программисты не нужно явно выделять или выпускать память. Память JavaScript выделяется, когда все создаются (объекты, строки и т. Д.) И освобождены автоматически, когда они больше не используются. Этот процесс называется сборкой мусора.

  var a = 1;  // allocates memory for a number
  var b = {a: 1}; // allocates memory for an object

Когда выделенная память больше не требуется, то она будет выпущена. Утечки памяти , и большинство проблем, связанных с памятью, возникающие во время публикации памяти.

Коллекция мусора является формой автоматического управления памятью. Коллектор мусора или просто коллекционер, пытается восстановить мусор или память, занятую объектами, которые больше не используются программой. Мы посмотрим на два алгоритма, используемых для сборки мусора: –

1). Ссылатная коллекция мусора Отказ

Присвоение ссылки – это методика программирования хранения количества ссылок, указателей или ручек на ресурс, такой как объект, блок памяти, дискового пространства и другие.

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

Этот алгоритм считает нулевой объект ссылок в качестве объекта, который больше не используется приложением.

  var object1 = { object2: { value: 2 } };
  object1 = 2; // object2 now has zero reference count, hence memory will be released

Однако этот алгоритм имеет ограничения с циклами.

Рассмотрим функцию ниже,

  function cycleReference() {
    var object1 = {};
    var object2 = {};
    object1.a = object2; // object1 references object2
    object2.a = object1; // object2 references object1
    return 'done';
  }

В приведенной выше функции, в которой объект1 ссылается на объект2. и объект2 ссылается на объект1 И это создает цикл Отказ Когда объем выходит из функции, то эти два объекта бесполезны. Тем не менее, сборщик мусора не может освободить память, так как эти два по-прежнему получают ссылку на друг друга. Это приводит к утечкам памяти в приложении.

2). Марк и промежуток алгоритма Отказ Сборщик мусора использует этот алгоритм для свободной памяти, когда объект недоступен, а не нулевой объект ссылки.

Сборщик мусора сначала найдет все глобальные объекты или корневые объекты и найдут все ссылки на эти глобальные объекты и ссылки на ссылочный объект и так далее. Используя этот алгоритм, сборщик мусора будет идентифицировать доступные и недоступные объекты. Все недоступные объекты будут автоматически собраны мусор.

Давайте попробуем реализовать что-то похожее на этот алгоритм.

Оригинал: “https://dev.to/abhilashiam/garbage-collection-in-javascript-126a”