2017-02-21 2 views
0

LoadableDetachableModeltransientModelObject переходное поле. Почему устанавливает метод отсоединенияПочему LoadableDetachableModel.detach устанавливает transientModelObject = null?

transientModelObject=null 

Я спрашиваю об этом, потому что он не будет сериализован.

+0

Для окончательного ответа вы должны спросить автора этого класса, но я предполагаю, что все, на что он ссылается, доступен для GC. (Или, если быть более точным: избегать того, что LDM является единственной вещью, удерживающей GC). – biziclop

ответ

1

Причина в том, что экземпляр страницы хранится в сеансе http как живой (несериализованный) объект. В контракте LoadableDetachableModel указано, что его номер modelObject будет доступен в течение цикла запроса. Если это не null не указано явно на detach(), то оно будет по-прежнему доступно в следующем запросе.

+0

В 'LoadableDetachableModel.getObject' всегда будет выполняться:' transientModelObject = load() ', потому что' state == DETACHED' (или первый раз, 'state == null'). Таким образом, объект модели всегда будет перезаписан. Итак, что вы имеете в виду, когда говорите, что он по-прежнему будет доступен в следующем запросе? – ericj

+0

Государства были введены несколько месяцев назад. LDM существует с 10 лет. Путем 'null'-ifying объекта модели вручную мы сохраняем размер сеанса меньше. –

1

Обычно ваши компоненты остаются в памяти (если контейнер не сериализует сеанс на диск), поэтому обнуление ссылки минимизирует потребление памяти.

Зачем тратить много памяти, когда вам это не нужно до следующего запроса?

Смежные вопросы