#java #xml-serialization
#java #xml-сериализация
Вопрос:
Мой вопрос касается использования слабых ссылок в Java и того, как XMLDecode справляется с этим. Допустим, у меня есть два объекта, A и B. B содержит слабую ссылку на A. Я использую XMLEncode для записи их на диск, а позже я использую XMLDecode для их повторного чтения.
Насколько я понимаю, нет установленного контракта для запуска сборщика мусора, поэтому, если XMLDecode начинается с инициализации B перед A, перед инициализацией A появляется краткое окно, когда слабая ссылка может быть непреднамеренно нарушена. Правильно ли это?
Кроме того, если XMLDecode инициализирует A внутри слабой ссылки в B, а затем пытается использовать этот экземпляр A, когда мы пытаемся явно загрузить A из XMLDecode.readObject() , наверняка это может вызвать исключение нулевого указателя, если сборщик мусора запустился между инициализацией и назначением? Должно быть что-то, чтобы избежать этого, или что-то, что я неправильно понял в процессе сборки мусора.
Ответ №1:
Если A
объект, на который слабо ссылается слабая ссылка, присутствует внутри экземпляра B
, когда вы сериализуете, а затем десериализуете структуру, последовательность инициализации будет :
-
Создать экземпляр
B
-
Создайте экземпляр weak-ref внутри
B
- Создайте объект
A
- Установите слабую ссылку на шаге 2 для объекта, инициализированного на шаге 3.
Нет, где на этих этапах есть какая-либо область для GC для сбора экземпляра A
.
Комментарии:
1. Это потому, что экземпляр XMLDecode также ссылается на A между собой? или это проблема времени, и в этом случае не могли бы вы предоставить ссылку на обоснование. Спасибо
2. Оглядываясь назад, вы не можете сериализовать weakreferences для начала, так что это совершенно не проблема.