Почему «malloced_memory» ниже, чем «used_heap_size» в Node.js?

#node.js #malloc #heap-memory #v8

Вопрос:

В каждом примере v8.getHeapStatistics() malloced_memory , по-видимому, ниже, чем used_heap_size :

 {
  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,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0
}
 

Как может malloced_memory быть ниже, чем used_heap_size ? Разве это не used_heap_size подмножество malloced_memory ?

Мои предположения (очевидно, неверные, если malloced_memory только они не в КБ и used_heap_size не в B):

  • malloced_memory : общая память, полученная от ОС (необходимая для создания кучи V8, хранения Buffer s и т. Д.).
  • used_heap_size : общий размер всех объектов в куче V8 (включая не собранный мусор).

Ответ №1:

(Разработчик V8 здесь.)

Память для управляемой кучи-это mmap ed, а не malloc ed, поэтому не ожидается, что она будет подмножеством.