Node.js - V8 模块



chrome V8 引擎是一个高性能的 JavaScript 引擎,用 C++ 编写并在 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 模块中可用的方法列表 -

模块 描述
cachedDataVersionTag()

用于检索一个整数值,该值将表示 v8 版本的版本标记、命令行标志和检测到的 CPU 功能。

getHeapSpaceStatistics()

用于检索 v8 堆空间的统计信息。

getHeapStatistics()

用于检索有关从 v8 版本派生的堆的统计信息

序列化 API 方法

以下是序列化 API 中可用的方法列表 -

模块 描述
serialize()

用于将任何数据类型序列化到缓冲区中

deserialize()

用于将缓冲区值反序列化为 JavaScript 值。

序列化程序方法

以下是 v8 中可用的方法列表。序列化器类 -

模块 描述
writeHeader()

用于将标头写入内部缓冲区。

writeValue()

用于序列化 JavaScript 值并将序列化的表示形式添加到内部缓冲区

releaseBuffer()

用于检索存储在内部缓冲区中的值。

writeUnit32()

用于将原始 32 位无符号整数写入内部缓冲区。

writeUnit64()

用于将原始 64 位无符号整数写入内部缓冲区。

writeDouble()

用于将 JavaScript 数字值写入内部缓冲区。

writeRawBytes()

用于将原始字节写入序列化程序的内部缓冲区。

反序列化器方法

以下是 v8 中可用的方法列表。解串器类 -

模块 描述
readHeader()

用于读取和验证内部缓冲区中的标头。

readValue()

用于反序列化在内部缓冲区中写入的 JavaScript 值。

readUnit32()

用于读取原始的 32 位无符号整数并返回它。

readUnit64()

用于读取原始的 64 位无符号整数,并将其作为数组及其更高和更低的值返回。

readRawBytes()

用于从反序列化程序的内部缓冲区读取原始字节。