Често срещан проблем по време на работа по проект на JavaScript Node.js е грешката „JavaScript heap of memory“. Тази грешка обикновено възниква, когато паметта по подразбиране, разпределена от вашата система за Node.js, не е достатъчна за изпълнение на голям проект.
Грешката е често срещана, независимо дали изпълнявате проекта си на Windows, macOS или дистрибуция на Linux като Ubuntu. За щастие има няколко лесни корекции, които могат да помогнат за разрешаването на грешката „JavaScript heap of memory“.
Какво е Heap Memory?
Преди да разгледате коригирането на грешката, е полезно да разберете какво е куп памет и как програмите го използват.
Паметта, разпределена в стека на системата, се нарича още динамично разпределена памет. От програмиста зависи да използва наличната памет, както намери за добре. По-важното е, че размерът на купчината за дадена програма зависи от наличната виртуална памет, разпределена за нея.
Ако изпълнявате сравнително голям проект, той може да изисква повече памет от разпределената част по подразбиране. Това може да доведе до срив на вашия проект и да регистрирате грешката „JavaScript heap of memory“.
Как да поправите JavaScript Heap of Memory на Windows
Независимо от вашата IDE, корекцията „JavaScript heap of memory“ е идентична.
Можеш добавете променлива на средата чрез контролния панел за увеличаване на паметта, разпределена за Node.js проект.
- Отвори Старт меню, търся Разширени настройки на систематаи изберете най-доброто съвпадение.
- От диалоговия прозорец щракнете върху Променливи на средата, след което щракнете върху Нов от двете Системни променливи или Потребителски променливи. Първото се отнася за всички потребители на вашия компютър, докато второто засяга само текущия ви акаунт
- В Име на променливата въведете полето NODE_OPTIONS. В Променлива стойност въведете полето --max-old-space-size=4096. Тази стойност ще разпредели 4 GB виртуална памет за Node.js. За да зададете различна стойност, умножете необходимата сума в GB по 1024 (стойността на променливата трябва да е в MB).
- Кликнете върху Добре за да запазите промените си, след което щракнете Приложи и накрая щракнете Добре още веднъж. Рестартирайте проекта си, за да влязат в сила промените.
Можете също да зададете променлива на средата чрез терминал на Windows PowerShell.
Стартирайте терминал PowerShell, въведете командата по-долу и натиснете Enter:
$env: NODE_OPTIONS="--max-old-space-size=4096"
Ако искате само временно да увеличите паметта на стека, изпълнете командата по-долу в терминал PowerShell, преди да изпълните проекта си:
комплект NODE_OPTIONS=--max-old-space-size=4096
След като въведете тази команда, можете да внедрите/изпълните проекта си с помощта на npm стартиране dev или ваш собствен скрипт.
Не забравяйте винаги да въвеждате необходимия размер на паметта в MB. Ако не го направите, това може да доведе до неочаквано поведение във вашата програма. Също така е жизненоважно да не разпределяте цялата си налична памет, тъй като това може да причини значителна системна повреда.
Как да поправите грешката на JavaScript Heap of Memory на macOS и Linux
В macOS и Linux корекцията на паметта на купчината е много подобна. Ти трябва експортиране на променлива на средата който указва количеството виртуална памет, разпределено за Node.js.
Във вашия терминал, преди да изпълните проекта си, въведете следната команда и натиснете Enter:
износ NODE_OPTIONS=--max-old-space-size=4096
Това ще разпредели 4GB виртуална памет за пространството за изпълнение на Node.js. За да зададете различно количество памет, сменете 4096 с необходимата сума в MB.
Можете да добавите горната команда към вашия конфигурационен файл, за да избегнете повтаряне на процеса. За да направите това, следвайте същото процес за настройка на вашата променлива PATH.
Избягвайте грешка в паметта на Heap на JavaScript
Можете да избегнете тази грешка, като се уверите, че програмата ви няма изтичане на памет. Правилното управление на паметта е от решаващо значение, когато пишете вашите програми, особено на език от ниско ниво.
Въпреки че увеличаването на разпределената памет временно ще реши проблема, трябва да намерите основната причина и да я отстраните.