2015-05-29 15 views
23

Używam węzła v0.12.4. Kiedy uruchomić następujący kod z node --max-old-space-size=8192 test.js daje mi błąd FATAL ERROR: invalid array length Allocation failed - process out of memory- nieprawidłowa długość tablicy

var a = new Array(200000000); 
console.log(a.length); 

Jednak w przypadku zmiany rozmiaru okna na 300000000 nie dostanę żadnego błędu. Co tu się dzieje? Czy jest jakiś argument z wiersza poleceń od --max-old-space-size muszę zmienić?

+0

Moje pierwsze przypuszczenie było takie, że pierwszy rozmiar był nieco mniejszy niż największa 32-bitowa liczba całkowita, a drugi nieco większy, ale jest o jeden za mało zer, aby to stanowiło problem. – Pointy

+0

Co ciekawe, nie mogę odtworzyć tego w wersji v0.10. v0.11 segfaults. – fny

+1

Być może istotne: [Limit pamięci sterty Node.js dla pojedynczego obiektu] (http://stackoverflow.com/questions/25231808/node-js-heap-memory-limit-for-single-object) – jfriend00

Odpowiedz

6

V8 wielkość sterty jest ograniczona do 1 GB dla 64-bitowego i 512 dla 32-bitowej maszynie, ale obiekty buforowe występują w dużej mierze poza sterty. można rozszerzyć wykorzystanie pamięci do 1,7 GB w trybie 64-bitowym i ~ 1 GB w komputerze 32-bitowym. Możesz spróbować tego.

--max-old-space-size=3000 --trace-gc-verbose 

można wydrukować śledzenie, aby dowiedzieć się więcej o używaniu pamięci.

Powiązane problemy