Node.js - V8 模块
Chrome V8 引擎 是一个用 C++ 编写的、高性能的 JavaScript 引擎,用于 Google Chrome。计算机只能理解机器语言,而无法理解 JavaScript 或 HTML 对象。
用 JavaScript 编写的代码只有浏览器才能理解,机器无法理解。因此,JS V8 引擎会将 JavaScript 代码转换为/转化为机器可理解的语言,以便机器能够理解。
NodeJS V8 模块 提供了与 Node.js 二进制文件中内置的 V8 版本特定的 API。
引入 V8 模块
要引入 V8 模块,请在你的 Node.js 文档开头添加以下语法。
const v8 = require('v8')
V8 模块为我们提供了使用 NodeJS v8.getHeapStatistics() 方法和 v8.getHeapSpaceStatistics() 方法获取堆内存信息的方法。让我们通过合适的示例来详细了解它们。
打印 V8 堆的统计信息
要打印 V8 堆的统计信息,我们使用 NodeJS v8.getHeapStatistics() 方法。
示例
const v8 = require('v8');
console.log(v8.getHeapStatistics());
输出
{
total_heap_size: 5369856,
total_heap_size_executable: 524288,
total_physical_size: 4303400,
total_available_size: 17226376544,
used_heap_size: 2849672,
heap_size_limit: 17230200832,
malloced_memory: 8192,
peak_malloced_memory: 418904,
does_zap_garbage: 0,
number_of_native_contexts: 1,
number_of_detached_contexts: 0
}
打印 V8 堆空间的统计信息
要获取 V8 堆空间的统计信息,我们使用 NodeJS v8.getHeapSpaceStatistics() 方法。
示例
const v8 = require('v8');
console.log(v8.getHeapSpaceStatistics());
输出
[
{
space_name: 'read_only_space',
space_size: 262144,
space_used_size: 32808,
space_available_size: 0,
physical_space_size: 33088
},
{
space_name: 'new_space',
space_size: 2097152,
space_used_size: 649416,
space_available_size: 398040,
physical_space_size: 2088040
},
{
space_name: 'old_space',
space_size: 1916928,
space_used_size: 1582320,
space_available_size: 88312,
physical_space_size: 1584560
},
{
space_name: 'code_space',
space_size: 430080,
space_used_size: 155616,
space_available_size: 0,
physical_space_size: 172000
},
{
space_name: 'map_space',
space_size: 528384,
space_used_size: 308880,
space_available_size: 0,
physical_space_size: 309720
},
{
space_name: 'large_object_space',
space_size: 135168,
space_used_size: 131112,
space_available_size: 0,
physical_space_size: 135168
},
{
space_name: 'code_large_object_space',
space_size: 0,
space_used_size: 0,
space_available_size: 0,
physical_space_size: 0
},
{
space_name: 'new_large_object_space',
space_size: 0,
space_used_size: 0,
space_available_size: 1047456,
physical_space_size: 0
}
]
V8 模块方法
以下是 V8 模块 中可用的方法列表 −
| 序号 | 模块 & 描述 |
|---|---|
| 1 | cachedDataVersionTag() 用于检索一个整数值,该值代表 v8 版本、命令行标志和检测到的 CPU 功能的版本标签。 |
| 2 | getHeapSpaceStatistics() 用于检索 v8 堆空间的统计信息。 |
| 3 | getHeapStatistics() 用于检索从 v8 版本派生的堆统计信息。 |
Serialization API 方法
以下是 Serialization API 中可用的方法列表 −
| 序号 | 模块 & 描述 |
|---|---|
| 1 | serialize() 用于将任何数据类型序列化为 buffer。 |
| 2 | deserialize() 用于将 buffer 值反序列化为 JavaScript 值。 |
Serializer 方法
以下是 v8.Serializer class 中可用的方法列表 −
| 序号 | 模块 & 描述 |
|---|---|
| 1 | writeHeader() 用于将 header 写入内部 buffer。 |
| 2 | writeValue() 用于序列化 JavaScript 值,并将序列化表示添加到内部 buffer 中 |
| 3 | releaseBuffer() 用于获取内部 buffer 中存储的值。 |
| 4 | writeUnit32() 用于将原始 32 位无符号整数写入内部 buffer。 |
| 5 | writeUnit64() 用于将原始 64 位无符号整数写入内部 buffer。 |
| 6 | writeDouble() 用于将 JavaScript number 值写入内部 buffer。 |
| 7 | writeRawBytes() 用于将原始字节写入 serializer 的内部 buffer。 |
Deserializer 方法
以下是 v8.Deserializer class 中可用的方法列表 −
| 序号 | 模块 & 描述 |
|---|---|
| 1 | readHeader() 用于读取并验证内部 buffer 中的 header。 |
| 2 | readValue() 用于反序列化写入内部 buffer 中的 JavaScript 值。 |
| 3 | readUnit32() 用于读取原始 32 位无符号整数并返回。 |
| 4 | readUnit64() 用于读取原始 64 位无符号整数并以包含其高位和低位值的数组形式返回。 |
| 5 | readRawBytes() 用于从 deserializer 的内部 buffer 中读取原始字节。 |