mirror of
https://github.com/nodejs/node.git
synced 2025-04-28 13:40:37 +00:00

The maximum hard limit that `util.inspect()` could theoretically handle is the maximum string size. That is ~2 ** 28 on 32 bit systems and ~2 ** 30 on 64 bit systems. Due to the recursive algorithm a complex object could easily exceed that limit without throwing an error right away and therefore crashing the application by exceeding the heap limit. `util.inspect()` is fast enough to compute 128 MB of data below one second on an Intel(R) Core(TM) i7-5600U CPU. This hard limit allows to inspect arbitrary big objects from now on without crashing the application or blocking the event loop significantly. PR-URL: https://github.com/nodejs/node/pull/22756 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
21 lines
500 B
JavaScript
21 lines
500 B
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
|
|
// Test that huge objects don't crash due to exceeding the maximum heap size.
|
|
|
|
const util = require('util');
|
|
|
|
// Create a difficult to stringify object. Without the artificial limitation
|
|
// this would crash or throw an maximum string size error.
|
|
let last = {};
|
|
const obj = last;
|
|
|
|
for (let i = 0; i < 1000; i++) {
|
|
last.next = { circular: obj, last, obj: { a: 1, b: 2, c: true } };
|
|
last = last.next;
|
|
obj[i] = last;
|
|
}
|
|
|
|
util.inspect(obj, { depth: Infinity });
|