Фон
Я внедряю тестовую среду для измерения сложности проблемы, наблюдая, как изменяется потребляемое время по мере увеличения размера проблемы (1000, 10000, 100000 и т. Д.).
Выпуск
Я хочу тестировать с большими числами, поскольку время, затрачиваемое на выполнение этих тестов с небольшими числами, может сильно различаться. Однако процесс node
завершается сбоем, когда в куче не хватает памяти. Это происходит, когда я пытаюсь выделить массив размером 100000000.
Вот вывод ошибки:
<--- Last few GCs --->
[16528:000001D288DD3880] 58236 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.5 / 0.0 ms (average mu = 0.954, current mu = 0.951) allocation failure
[16528:000001D288DD3880] 58263 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.5 / 0.0 ms (average mu = 0.954, current mu = 0.951) allocation failure
[16528:000001D288DD3880] 58283 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.4 / 0.0 ms (average mu = 0.954, current mu = 0.951) allocation failure
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 0000033BDAD5C5C1]
Security context: 0x00b07821e6e9 <JSObject>
1: getArray [00000171693C1EA1] [file.ts~7] [pc=0000033BDAFFEC3F](this=0x01716938e449 <Object map = 000000223D38E439>,length=100000000,max=0x025631721d11 <Number 9.0072e+15>)
2: heapsortTest(aka heapsortTest) [0000002040FFF699] [...
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
1: 00007FF73EC6F04A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+5114
2: 00007FF73EC4A0C6 node::MakeCallback+4518
3: 00007FF73EC4AA30 node_module_register+2032
4: 00007FF73EED20EE v8::internal::FatalProcessOutOfMemory+846
5: 00007FF73EED201F v8::internal::FatalProcessOutOfMemory+639
6: 00007FF73F3F2BC4 v8::internal::Heap::MaxHeapGrowingFactor+9556
7: 00007FF73EFADC70 v8::internal::Factory::NewFixedDoubleArray+240
8: 00007FF73F025F8B v8::internal::HashTable<v8::internal::NumberDictionary,v8::internal::NumberDictionaryShape>::KeyAt+60555
9: 00007FF73F013916 v8::internal::HashTable<v8::internal::NumberDictionary,v8::internal::NumberDictionaryShape>::EntryToIndex+66198
10: 00007FF73F416B60 v8::internal::Bitmap::IsClean+29728
11: 0000033BDAD5C5C1
Вот как я запускаю процесс:
node -r ts-node/register --max-old-space-size=8192 --expose-gc heap/heapsort-test.ts
На моей машине установлено 16 ГБ ОЗУ.
Вопрос
Что я могу сделать, чтобы запустить большие тесты?