Nano Hash - криптовалюты, майнинг, программирование

Как V8 управляет своей кучей?

Я знаю, что когда сборщик мусора V8 работает, он будет отслеживать от корня сборщика мусора, так что недостижимые объекты будут помечены, а затем удалены. Мой вопрос в том, как GC пересекает эти объекты? Должна существовать структура данных для хранения всех доступных или недоступных объектов. Битовая карта? Связанная таблица?

Кстати, JVM делает то же самое?


  • вас интересуют все достижимые/недостижимые или корни? Я сам мало что знаю о v8, но я знаю, что ответы для большинства сборщиков мусора сложны, и я не совсем уверен, какую часть ответа вы искали. 06.06.2015

Ответы:


1

АлленШоу,

Google V8 Heap состоит из нескольких разных пространств. Есть отличный пост "Обзор V8: Сборка мусора.", который объясняет, как организована куча V8:

New-space: Most objects are allocated here. New-space is small and is
designed to be garbage collected very quickly, independent of other
spaces.

Old-pointer-space: Contains most objects which may have pointers to 
other objects. Most objects are moved here after surviving in new-space 
for a while.

Old-data-space: Contains objects which just contain raw data (no 
pointers to other objects). Strings, boxed numbers, and arrays of
unboxed doubles are moved here after surviving in new-space for a 
while.

Large-object-space: This space contains objects which are larger than
the size limits of other spaces. Each object gets its own mmap'd region
of memory. Large objects are never moved by the garbage collector.

Code-space: Code objects, which contain JITed instructions, are 
allocated here. This is the only space with executable memory (although
Codes may be allocated in large-object-space, and those are executable, too).

Cell-space, property-cell-space and map-space: These spaces contain
Cells, PropertyCells, and Maps, respectively. Each of these spaces
contains objects which are all the same size and has some constraints 
on what kind of objects they point to, which simplifies collection.

Далее в статье Конрада объясняется, что V8 GC построен на основе алгоритма Чейни.

Реализация кучи V8 находится в куче. cc и куча .ч. Инициализация кучи начинается с line 5423. Метод Address NewSpaceStart() найден на line 615 из heap.h содержит адрес, где начинается новое пространство, и где хранятся объекты, используя преимущество временной локальности.

Теперь о вашем втором вопросе: делает ли JVM то же самое? Забавный факт: существует 3 основных производственных JVM, и все они по-разному реализуют свои алгоритмы GC. Есть отличный блог о производительности, в котором написана статья "Как сборка мусора отличается в трех больших JVM", в которой более подробно обсуждается их реализация.

Существуют также разновидности GC, например, если вам нужна среда с малой задержкой, если вы переписали JVM на Scala и параметры настройки задержки в среде .NET.

Пожалуйста, дай мне знать, если возникнут какие-либо вопросы!

Спасибо за ваше время,

Теплые пожелания,

06.06.2015
  • Спасибо за ваш ответ. Это очень близко к тому, что я хочу. Остается еще один вопрос, как организованы объекты в одном пространстве. Например, в старом пространстве данных GC начинает отслеживать от корня до любых доступных объектов и использует указатель для получения их адреса, чтобы пометить их. Те, которые не отмечены, будут удалены, но как GC узнает их адрес и длину, когда они недоступны? 06.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..