Java XMLDecode и слабые ссылки

#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 , когда вы сериализуете, а затем десериализуете структуру, последовательность инициализации будет :

  1. Создать экземпляр B

  2. Создайте экземпляр weak-ref внутри B

  3. Создайте объект A
  4. Установите слабую ссылку на шаге 2 для объекта, инициализированного на шаге 3.

Нет, где на этих этапах есть какая-либо область для GC для сбора экземпляра A .

Комментарии:

1. Это потому, что экземпляр XMLDecode также ссылается на A между собой? или это проблема времени, и в этом случае не могли бы вы предоставить ссылку на обоснование. Спасибо

2. Оглядываясь назад, вы не можете сериализовать weakreferences для начала, так что это совершенно не проблема.