v8
一、v8.cachedDataVersionTag()
二、v8.getHeapCodeStatistics()
三、v8.getHeapSnapshot([options])
四、v8.getHeapSpaceStatistics()
4.1 认识
v8.getHeapSpaceStatistics()
是 Node.js
提供的一个用于获取 V8
引擎堆内存空间 统计信息的 API
。与 v8.getHeapStatistics()
相比,getHeapSpaceStatistics()
提供了更加详细的内存空间划分信息。它可以帮助开发者深入了解 V8
堆内存的各个区域的使用情况,尤其是在调试和优化内存时非常有用。
V8
堆内存划分为多个 堆空间(Heap Space
),每个堆空间的内存用于存储不同类型的对象。V8
在其垃圾回收过程中使用这些空间来提高性能。一般来说,V8
堆空间可以分为以下几种:
-
新生代(
Young Generation
):用于存储短生命周期的对象(例如,函数内的局部变量)。新生代内存通常较小,且频繁进行垃圾回收。 -
老生代(
Old Generation
):存储长期存活的对象,通常需要经过多次垃圾回收周期才能被回收。老生代的垃圾回收次数较少,但每次回收的时间较长。 -
代码空间(
Code Space
):存储由V8
编译的机器代码。 -
大型对象空间(
Large Object Space
):存储大对象(通常大于8MB
)。
4.2 语法
const v8 = require('v8');
function logHeapSpaceStatistics() {
const heapSpaceStats = v8.getHeapSpaceStatistics();
heapSpaceStats.forEach(space => {
console.log(`Space Name: ${space.space_name}`);
console.log(`Total Size: ${space.space_size} bytes`);
console.log(`Used Size: ${space.space_used_size} bytes`);
console.log(`Available Size: ${space.space_available_size} bytes`);
console.log(`Physical Size: ${space.space_physical_size} bytes`);
console.log('----------------------------------');
});
}
// 每 10 秒打印一次堆空间统计
setInterval(logHeapSpaceStatistics, 10000);
v8.getHeapSpaceStatistics()
返回一个包含多个堆空间的详细统计信息的数组。每个堆空间的统计信息都包括:
-
space_name
:堆空间的名称,例如new_space
,old_space
,code_space
,large_object_space
等。 -
space_size
:堆空间的总内存大小(字节)。 -
space_used_size
:当前堆空间使用的内存大小(字节)。 -
space_available_size
:当前堆空间可用的内存大小(字节)。 -
space_physical_size
:堆空间的物理内存大小(字节)。
五、v8.getHeapStatistics()
5.1 认识
v8.getHeapStatistics()
是 Node.js
中的一个 V8
引擎提供的 API
,用于获取有关 JavaScript
堆内存(Heap Memory
)的统计信息。它为开发者提供了 V8
引擎内存的关键指标,有助于监控内存使用情况,进行性能分析和调优。
这个方法返回的是一个包含多个字段的对象,提供了堆内存的使用情况、内存分配情况以及垃圾回收的相关统计信息。
V8
堆内存简介: V8
引擎将 JavaScript
内存划分为不同的区域,包括:
-
新生代(
Young Generation
):存储短生命周期的对象,如函数内临时创建的对象。V8
对新生代的垃圾回收较为频繁,通常使用 Scavenge 算法。 -
老生代(
Old Generation
):存储长生命周期的对象,这些对象往往需要经历多次垃圾回收周期才会被回收。V8
使用Mark-Sweep
和Mark-Compact
算法对老生代进行垃圾回收。 -
代码空间(
Code Space
):存储V8
编译的机器代码。 -
内存池(
Memory Pool
):管理V8
引擎的其他内存需求。
5.2 语法
const v8 = require('v8');
function logHeapStatistics() {
const heapStats = v8.getHeapStatistics();
console.log('Total heap size: ', heapStats.total_heap_size);
console.log('Used heap size: ', heapStats.used_heap_size);
console.log('Total physical size: ', heapStats.total_physical_size);
console.log('Available heap size: ', heapStats.total_available_size);
console.log('Heap size limit: ', heapStats.heap_size_limit);
console.log('Malloced memory: ', heapStats.malloced_memory);
console.log('Peak malloced memory: ', heapStats.peak_malloced_memory);
}
// 每 10 秒打印一次堆内存统计
setInterval(logHeapStatistics, 10000);
-
total_heap_size
:堆内存的总大小(字节)。这是V8
堆的总内存空间。 -
total_heap_size_executable
:包含V8
编译机器码的堆空间大小(字节)。 -
total_physical_size
:V8
堆的物理内存大小(字节)。这个值可能大于total_heap_size
,因为V8
可能为堆分配了超过实际堆使用量的内存。 -
total_available_size
:当前堆内存中可用的内存大小(字节)。这意味着V8
可以用来分配新对象的空间。 -
used_heap_size
:当前堆内存已使用的字节数。 -
heap_size_limit
:堆内存的最大限制(字节),当堆内存使用接近此值时,垃圾回收器会被触发。 -
malloced_memory
:由V8
分配的额外内存量(字节),这包括V8
内部的非堆内存。