v8: add v8.getCppHeapStatistics() method · nodejs/node@a22c21c
@@ -271,6 +271,92 @@ buffers and external strings.
271271}
272272```
273273274+## `v8.getCppHeapStatistics([detailLevel])`
275+276+Retrieves [CppHeap][] statistics regarding memory consumption and
277+utilization using the V8 [`CollectStatistics()`][] function which
278+may change from one V8 version to the
279+next.
280+281+* `detailLevel` {string|undefined}: **Default:** `'detailed'`.
282+ Specifies the level of detail in the returned statistics.
283+ Accepted values are:
284+* `'brief'`: Brief statistics contain only the top-level
285+ allocated and used
286+ memory statistics for the entire heap.
287+* `'detailed'`: Detailed statistics also contain a break
288+ down per space and page, as well as freelist statistics
289+ and object type histograms.
290+291+It returns an object with a structure similar to the
292+[`cppgc::HeapStatistics`][] object. See the [V8 documentation][`cppgc::HeapStatistics struct`]
293+for more information about the properties of the object.
294+295+```js
296+// Detailed
297+({
298+ committed_size_bytes: 131072,
299+ resident_size_bytes: 131072,
300+ used_size_bytes: 152,
301+ space_statistics: [
302+ {
303+ name: 'NormalPageSpace0',
304+ committed_size_bytes: 0,
305+ resident_size_bytes: 0,
306+ used_size_bytes: 0,
307+ page_stats: [{}],
308+ free_list_stats: {},
309+ },
310+ {
311+ name: 'NormalPageSpace1',
312+ committed_size_bytes: 131072,
313+ resident_size_bytes: 131072,
314+ used_size_bytes: 152,
315+ page_stats: [{}],
316+ free_list_stats: {},
317+ },
318+ {
319+ name: 'NormalPageSpace2',
320+ committed_size_bytes: 0,
321+ resident_size_bytes: 0,
322+ used_size_bytes: 0,
323+ page_stats: [{}],
324+ free_list_stats: {},
325+ },
326+ {
327+ name: 'NormalPageSpace3',
328+ committed_size_bytes: 0,
329+ resident_size_bytes: 0,
330+ used_size_bytes: 0,
331+ page_stats: [{}],
332+ free_list_stats: {},
333+ },
334+ {
335+ name: 'LargePageSpace',
336+ committed_size_bytes: 0,
337+ resident_size_bytes: 0,
338+ used_size_bytes: 0,
339+ page_stats: [{}],
340+ free_list_stats: {},
341+ },
342+ ],
343+ type_names: [],
344+ detail_level: 'detailed',
345+});
346+```
347+348+```js
349+// Brief
350+({
351+ committed_size_bytes: 131072,
352+ resident_size_bytes: 131072,
353+ used_size_bytes: 128864,
354+ space_statistics: [],
355+ type_names: [],
356+ detail_level: 'brief',
357+});
358+```
359+274360## `v8.queryObjects(ctor[, options])`
275361276362<!-- YAML
@@ -1343,12 +1429,14 @@ writeString('hello');
13431429writeString('你好');
13441430```
134514311432+[CppHeap]: https://v8docs.nodesource.com/node-22.4/d9/dc4/classv8_1_1_cpp_heap.html
13461433[HTML structured clone algorithm]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
13471434[Hook Callbacks]: #hook-callbacks
13481435[V8]: https://developers.google.com/v8/
13491436[`--heapsnapshot-near-heap-limit`]: cli.md#--heapsnapshot-near-heap-limitmax_count
13501437[`AsyncLocalStorage`]: async_context.md#class-asynclocalstorage
13511438[`Buffer`]: buffer.md
1439+[`CollectStatistics()`]: https://v8docs.nodesource.com/node-22.4/d9/dc4/classv8_1_1_cpp_heap.html#a3a5d09567758e608fffde50eeabc2feb
13521440[`DefaultDeserializer`]: #class-v8defaultdeserializer
13531441[`DefaultSerializer`]: #class-v8defaultserializer
13541442[`Deserializer`]: #class-v8deserializer
@@ -1362,6 +1450,8 @@ writeString('你好');
13621450[`async_hooks`]: async_hooks.md
13631451[`before` callback]: #beforepromise
13641452[`buffer.constants.MAX_LENGTH`]: buffer.md#bufferconstantsmax_length
1453+[`cppgc::HeapStatistics struct`]: https://v8docs.nodesource.com/node-22.4/df/d2f/structcppgc_1_1_heap_statistics.html
1454+[`cppgc::HeapStatistics`]: https://v8docs.nodesource.com/node-22.4/d7/d51/heap-statistics_8h_source.html
13651455[`deserializer._readHostObject()`]: #deserializer_readhostobject
13661456[`deserializer.transferArrayBuffer()`]: #deserializertransferarraybufferid-arraybuffer
13671457[`init` callback]: #initpromise-parent