Spec-Zone.ru › Node.js 8 LTS

V8

Модуль v8 предоставляет API, специфичные для версии V8, встроенной в бинарник Node.js. К нему можно получить доступ следующим образом:

const v8 = require('v8');

Примечание: API и реализация могут быть изменены в любое время.

v8.cachedDataVersionTag()

Добавлена в: v8.0.0

Возвращает целое число, представляющее «метку версии», полученную из версии V8, флагов командной строки и обнаруженных функций процессора. Это полезно для определения совместимости буфера vm.Script cachedData с данным экземпляром V8.

v8.getHeapSpaceStatistics()

История
Версия Изменения
v7.5.0

Поддержка значений, превышающих диапазон 32-битного беззнакового целого числа.

v6.0.0

Добавлена в: v6.0.0

Возвращает статистику о пространствах кучи V8, то есть сегментах, составляющих кучу V8. Порядок пространств кучи и наличие пространства кучи не гарантируются, так как статистика предоставляется с помощью функции V8 GetHeapSpaceStatistics и может изменяться от одной версии V8 к другой.

Возвращаемое значение — массив объектов, содержащих следующие свойства:

  • space_name <строка>
  • space_size <число>
  • space_used_size <число>
  • space_available_size <число>
  • physical_space_size <число>

Например:

[
  {
    "space_name": "new_space",
    "space_size": 2063872,
    "space_used_size": 951112,
    "space_available_size": 80824,
    "physical_space_size": 2063872
  },
  {
    "space_name": "old_space",
    "space_size": 3090560,
    "space_used_size": 2493792,
    "space_available_size": 0,
    "physical_space_size": 3090560
  },
  {
    "space_name": "code_space",
    "space_size": 1260160,
    "space_used_size": 644256,
    "space_available_size": 960,
    "physical_space_size": 1260160
  },
  {
    "space_name": "map_space",
    "space_size": 1094160,
    "space_used_size": 201608,
    "space_available_size": 0,
    "physical_space_size": 1094160
  },
  {
    "space_name": "large_object_space",
    "space_size": 0,
    "space_used_size": 0,
    "space_available_size": 1490980608,
    "physical_space_size": 0
  }
]

v8.getHeapStatistics()

История
Версия Изменения
v7.5.0

Поддержка значений, превышающих диапазон 32-битного беззнакового целого числа.

v7.2.0

Добавлены malloced_memory, peak_malloced_memory, и does_zap_garbage.

v1.0.0

Добавлена в: v1.0.0

Возвращает объект со следующими свойствами:

  • total_heap_size <число>
  • total_heap_size_executable <число>
  • total_physical_size <число>
  • total_available_size <число>
  • used_heap_size <число>
  • heap_size_limit <число>
  • malloced_memory <число>
  • peak_malloced_memory <число>
  • does_zap_garbage <число>

does_zap_garbage — булево значение 0/1, указывающее, включен или нет параметр --zap_code_space. Это позволяет V8 перезаписывать мусор кучи шаблоном битов. Следовательно, footprint RSS (resident memory set) увеличивается, так как постоянно обрабатываются все страницы кучи, что делает их менее вероятными для свопинга операционной системой.

Например:

{
  total_heap_size: 7326976,
  total_heap_size_executable: 4194304,
  total_physical_size: 7326976,
  total_available_size: 1152656,
  used_heap_size: 3476208,
  heap_size_limit: 1535115264,
  malloced_memory: 16384,
  peak_malloced_memory: 1127496,
  does_zap_garbage: 0
}

v8.setFlagsFromString(string)

Добавлена в: v1.0.0

Метод v8.setFlagsFromString() позволяет программно устанавливать флаги командной строки V8. Этот метод следует использовать с осторожностью. Изменение настроек после запуска VM может привести к непредсказуемому поведению, включая сбои и потерю данных; или это может быть просто неэффективно.

Доступные для версии Node.js параметры V8 можно определить, выполнив node --v8-options. Неофициальный, поддерживаемый сообществом список параметров и их влияния доступен здесь.

Использование:

// Print GC events to stdout for one minute.
const v8 = require('v8');
v8.setFlagsFromString('--trace_gc');
setTimeout(function() { v8.setFlagsFromString('--notrace_gc'); }, 60e3);

API сериализации

Устойчивость: 1 - Экспериментальная

API сериализации предоставляет средства сериализации значений JavaScript способом, совместимым с алгоритмом структурированного клонирования HTML. Формат обратно совместим (т. е. безопасно сохраняется на диск).

Примечание: это API находится в разработке, и могут произойти изменения (включая несовместимые изменения в API или формате передачи данных), пока это предупреждение не будет удалено.

v8.serialize(value)

  • Возвращает: <Буфер>

Использует DefaultSerializer для сериализации value в буфер.

v8.deserialize(buffer)

  • buffer <Буфер> | <Uint8Array> Буфер, возвращённый методом serialize().

Использует DefaultDeserializer с параметрами по умолчанию для чтения значения JS из буфера.

класс: v8.Serializer

new Serializer()

Создаёт новый объект Serializer.

serializer.writeHeader()

Записывает заголовок, который включает версию формата сериализации.

serializer.writeValue(value)

Сериализует значение JavaScript и добавляет сериализованное представление в внутренний буфер.

Выбрасывает ошибку, если value не может быть сериализован.

serializer.releaseBuffer()

Возвращает хранящийся внутренний буфер. После освобождения буфера этот сериализатор не должен использоваться. Вызов этого метода приведёт к неопределённому поведению, если предыдущий метод записи завершился с ошибкой.

serializer.transferArrayBuffer(id, arrayBuffer)

  • id <целое без знака 32-битное>
  • arrayBuffer <ArrayBuffer> Экземпляр ArrayBuffer.

Помечает ArrayBuffer как содержащий содержимое, передаваемое вне полосы пропускания. Передайте соответствующий ArrayBuffer в контексте десериализации методу deserializer.transferArrayBuffer().

serializer.writeUint32(value)

  • value <целое без знака>

Записывает 32-битное беззнаковое целое число. Используется внутри пользовательского serializer._writeHostObject().

serializer.writeUint64(hi, lo)

  • hi <целое без знака>
  • lo <целое без знака>

Записывает 64-битное беззнаковое целое число, разделённое на старшую и младшую 32-битные части. Используется внутри пользовательского serializer._writeHostObject().

serializer.writeDouble(value)

  • value <число>

Записывает JS number значение. Используется внутри пользовательского serializer._writeHostObject().

serializer.writeRawBytes(buffer)

  • buffer <Буфер> | <Uint8Array>

Записывает сырые байты во внутренний буфер сериализатора. Десериализатор потребует способ вычисления длины буфера. Используется внутри пользовательского serializer._writeHostObject().

serializer._writeHostObject(object)

  • object <объект>

Этот метод вызывается для записи некоторого типа объекта хоста, т. е. объекта, созданного нативными C++ связями. Если сериализация object невозможна, необходимо бросить соответствующую ошибку.

Этот метод не присутствует в классе Serializer, но может быть предоставлен подклассами.

serializer._getDataCloneError(message)

  • message <строка>

Этот метод используется для генерации объектов ошибок, которые будут выброшены, когда объект нельзя клонировать.

По умолчанию этот метод использует конструктор Error и может быть переопределён в подклассах.

serializer._getSharedArrayBufferId(sharedArrayBuffer)

  • sharedArrayBuffer <SharedArrayBuffer>

Этот метод вызывается, когда сериализатор собирается сериализовать объект SharedArrayBuffer. Он должен вернуть целое беззнаковое 32-битное целое число ID для объекта, используя тот же ID, если этот объект уже был сериализован. При десериализации этот ID будет передан методу deserializer.transferArrayBuffer().

Если объект не может быть сериализован, должно быть выброшено исключение.

Этот метод отсутствует в классе Serializer самом по себе, но может быть предоставлен подклассами.

serializer._setTreatArrayBufferViewsAsHostObjects(flag)

  • flag <boolean> По умолчанию: false

Указывает, нужно ли рассматривать объекты TypedArray и DataView как объекты хоста, т.е. передавать их методу serializer._writeHostObject().

class: v8.Deserializer

new Deserializer(buffer)

  • buffer <Buffer> | <Uint8Array> Буфер, возвращённый методом serializer.releaseBuffer().

Создаёт новый объект Deserializer.

deserializer.readHeader()

Читает и проверяет заголовок (включая версию формата). Может, например, отклонить недействительный или неподдерживаемый формат данных. В этом случае будет выброшено исключение Error.

deserializer.readValue()

Десериализует значение JavaScript из буфера и возвращает его.

deserializer.transferArrayBuffer(id, arrayBuffer)

  • id <integer> Целое беззнаковое 32-битное число.
  • arrayBuffer <ArrayBuffer> | <SharedArrayBuffer> Экземпляр ArrayBuffer.

Помечает ArrayBuffer как имеющий содержимое, перемещаемое вне зоны обмена данными. Передайте соответствующий ArrayBuffer в контексте сериализации методу serializer.transferArrayBuffer() (или верните id из serializer._getSharedArrayBufferId() в случае SharedArrayBuffer).

deserializer.getWireFormatVersion()

  • Возвращает: <integer>

Читает базовую версию формата данных. Вероятно, будет полезно в основном для устаревшего кода, читающего старые версии формата данных. Возможно, не вызывается до .readHeader().

deserializer.readUint32()

  • Возвращает: <integer>

Читает и возвращает целое беззнаковое 32-битное число. Используется внутри пользовательского метода deserializer._readHostObject().

deserializer.readUint64()

  • Возвращает: <Array>

Читает и возвращает целое беззнаковое 64-битное число в виде массива [hi, lo] с двумя записями целых беззнаковых 32-битных чисел. Используется внутри пользовательского метода deserializer._readHostObject().

deserializer.readDouble()

  • Возвращает: <number>

Читает значение JS number. Используется внутри пользовательского метода deserializer._readHostObject().

deserializer.readRawBytes(length)

  • Возвращает: <Buffer>

Читает сырые байты из внутреннего буфера десериализатора. Параметр length должен соответствовать длине буфера, переданного методу serializer.writeRawBytes(). Используется внутри пользовательского метода deserializer._readHostObject().

deserializer._readHostObject()

Этот метод вызывается для чтения объекта хоста, т.е. объекта, созданного нативными C++-связями. Если десериализация данных невозможна, должно быть выброшено соответствующее исключение.

Этот метод отсутствует в классе Deserializer самом по себе, но может быть предоставлен подклассами.

class: v8.DefaultSerializer

Подкласс Serializer, который сериализует TypedArray (в частности Buffer) и DataView объекты как объекты хоста, и хранит только ту часть их базовых ArrayBufferов, на которые они ссылаются.

class: v8.DefaultDeserializer

Подкласс Deserializer, соответствующий формату, записанному методом DefaultSerializer.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v8.x/docs/api/v8.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API