Java XMLDecode и слабые ссылки - PullRequest
0 голосов
/ 13 октября 2011

Мой вопрос касается использования слабых ссылок в Java и того, как XMLDecode справляется с этим. Скажем, у меня есть два объекта, A и B. B содержит слабую ссылку на A. Я использую XMLEncode, чтобы записать их на диск, и позже я использую XMLDecode, чтобы прочитать их обратно.

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

Кроме того, если XMLDecode инициализирует A внутри слабой ссылки в B, а затем пытается использовать этот экземпляр A, когда мы пытаемся явно загрузить A из XMLDecode.readObject (), это, безусловно, может вызвать исключение нулевого указателя, если сборщик мусора работал между инициализацией и назначением? Должно быть что-то, чтобы избежать этого, или что-то, что я неправильно понял в процессе сбора мусора.

1 Ответ

0 голосов
/ 13 октября 2011

Если A является объектом, на который слабо ссылается слабая ссылка, присутствующая внутри экземпляра B, то при сериализации и десериализации структуры последовательность инициализации будет:

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

  2. Создать слабый реф-экземпляр внутри B

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

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

...