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
- Документация: обновление учебных материалов и руководств