openjdk.ruOpenJDK на русском

JEP 134: Intuitive Semantics for Nested Reference Objects

Интуитивно понятная семантика вложенных ссылочных объектов

ОтветственныйMandy Chung
ТипFeature
ОбластьSE
СтатусCandidate
Компонентhotspot / gc
Обсуждениеhotspot dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
ОдобренMikael Vidstedt
Создан2011/10/31 20:00
Обновлён2021/10/14 21:58
Задача8046124

Аннотация

Реализовать более интуитивно понятную семантику вложенных ссылочных объектов.

Мотивация

Уровни достижимости со слабыми и мягкими ссылками, определённые в спецификации java.lang.ref, вызывают путаницу и неверно истолковываются, как описано в 6990438 и 6990442 (см. также 4214755). Несколько клиентов просили сделать поведение более интуитивно понятным. Уточнение спецификации позволило бы избежать неоднозначностей и помогло бы улучшить тесты JCK для этого API.

Описание

Ниже приведён граф объектов, иллюстрирующий проблему:

Root ->  ... ->  SR ->  A ->  ... ->  WR ->  B ->  ...

SR и WR обозначают соответственно мягкую ссылку и слабую ссылку. Согласно текущей спецификации, когда GC обрабатывает SR и решает её не очищать, он затем помечает весь граф объектов, достижимый из A, включая граф объектов, достижимый из B, и не очищает WR, потому что B считается не слабодостижимым, а мягкодостижимым. Такое поведение не интуитивно. Было бы интуитивнее, если бы GC, решив не очищать мягкие ссылки, считал SR сильной ссылкой до конца своей работы. Иначе говоря, WR была бы очищена, поскольку B был бы слабодостижимым.

Основной объём работы по этому улучшению приходится на VM: во всех сборщиках нужно реализовать предлагаемое интуитивно понятное поведение. Что касается реализации в HotSpot VM, то после исправления производительности для 6684579 в 6u14 сборщики HotSpot VM, останавливающие все потоки приложения (stop-the-world), непреднамеренно дают новую интуитивно понятную семантику как побочный эффект. Сообщений от клиентов, связанных с этим изменением поведения, нет. Для этого улучшения остаётся реализовать интуитивно понятное поведение в CMS и G1 и обновить спецификацию java.lang.ref.

Тестирование

  • Все тесты обработки ссылок (включая JCK, регрессионные тесты и тесты SQE) должны проходить
  • Нет регрессий производительности
  • Необходимо заранее проверить вместе с клиентами, что изменение поведения не вызывает проблем с совместимостью

Риски и допущения

Совместимость — потенциальный риск, из-за которого может понадобиться сохранить текущее поведение по умолчанию и включать новое поведение флагом. Однако исправление для 6684578 вышло в 6u14, и сообщений о регрессиях из-за этого изменения поведения не поступало. Нам следует привлечь многих клиентов к тестированию существующих приложений с новым поведением, чтобы выявить возможные проблемы с совместимостью.

Влияние

  • Совместимость: разработка новых тестов JCK
  • Документация: обновление учебных материалов и руководств