Где находится большое пространство объектов V8? - PullRequest
0 голосов
/ 23 апреля 2020

Как видно из названия, я пытаюсь выяснить, где находится большое пространство объектов V8. Я сделал несколько экспериментов в Node JS, где я загружаю в память значительно большие объекты (+ 50 МБ). Из того, что я понимаю, эти объекты должны храниться непосредственно в большом объектном пространстве. Однако process.memoryUsage() не показывает никаких признаков хранения этих объектов вообще. Но объекты должны быть где-то ... Итак, где же большое пространство объектов, если не в куче процесса?

В старый коммит в репозитории V8 Я наткнулся на это, он читает :

Большие объекты (> Page :: kMaxRegularHeapObjectSize) размещаются и управляются пространством больших объектов. Большой объект выделяется из кучи ОС с дополнительными байтами заполнения (Page :: kPageSize + Page :: kObjectStartOffset). Большой объект всегда начинается в Page :: kObjectStartOffset на странице. Большие объекты не перемещаются во время сборщиков мусора.

И поэтому мне интересно:

  • Что это означает, что он выделяет большие объекты из кучи оперативной системы? Насколько я знаю, кучи связаны с задачами, и я не понимаю, как V8 может хранить память в куче, которая не является ее собственной, более того, в куче операционной системы. Должно быть, я ошибаюсь, поправьте меня, пожалуйста!
  • Это причина, по которой мой Node JS процесс показывает нормальное потребление памяти?

Спасибо!

1 Ответ

1 голос
/ 23 апреля 2020

Что означает выделение больших объектов из кучи оперативной системы?

Требуется память из ОС.

Где находится большой объект V8 постоянно находится пробел?

В памяти процесса (кучи), как и во всех других пробелах.

Я провел несколько экспериментов в Node JS

Если бы вы предоставили более подробную информацию, я мог бы лучше предположить, что, возможно, происходило. Может быть, вы использовали TypedArrays? Они обрабатываются специально, их резервные хранилища (больше определенного размера) не сохраняются в управляемой куче.

...