跳到主要内容

v8

2024年12月26日
柏拉文
越努力,越幸运

一、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-SweepMark-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_sizeV8 堆的物理内存大小(字节)。这个值可能大于 total_heap_size,因为 V8 可能为堆分配了超过实际堆使用量的内存。

  • total_available_size:当前堆内存中可用的内存大小(字节)。这意味着 V8 可以用来分配新对象的空间。

  • used_heap_size:当前堆内存已使用的字节数。

  • heap_size_limit:堆内存的最大限制(字节),当堆内存使用接近此值时,垃圾回收器会被触发。

  • malloced_memory:由 V8 分配的额外内存量(字节),这包括 V8 内部的非堆内存。

六、v8.queryObjects(ctor[, options])


七、v8.setFlagsFromString(flags)


八、v8.stopCoverage()


九、v8.takeCoverage()


十、v8.writeHeapSnapshot([filename[,options]])


十一、v8.setHeapSnapshotNearHeapLimit(limit)


十二、v8.serialize(value)


十三、v8.deserialize(buffer)