2013-02-25 2 views
3

Карты - очень распространенная идиома внутри разработки Grails и Groovy, из того, что я испытал. Теперь, когда я перешел к проекту, в котором используется более традиционная Java, я сильно затрудняюсь с помощью Tech Tech для использования HashMaps ->, и я понимаю его аргументацию, почему. HashMaps использование StrongReferences. StrongReferences придерживаться в любое время есть ссылка цепь.Грааля, карты и управление памятью

Общепринятая идиома, которую я видел в Groovy, - это использовать карты, чтобы по существу заменить POJO. (Как и в, вы видите это повсюду при просмотре примеров в сети.)

Как Грайльс обошел это со всеми его идиомами карты? Кто-нибудь сделал профилирование памяти в своих приложениях Grails? Карты, подобные params, ненадолго висят, или они предсказуемо умирают и собираются с завершением сеанса пользователя? Или мне нужно быть осведомленным об использовании Maps в Grails, как в Java?

======= Обновление ==== Вопрос выше еще стоит, но статья используется для справки является here:

+0

'params' живет только на один запрос. – ataylor

ответ

3

Экземпляры HashMap ничем не отличаются от экземпляров любого другого класса в Java - пока карта (соответственно POJO) достижима, тогда также будут доступны все другие объекты, на которые ссылаются записи карты (соответственно поля в POJO). Если экземпляр карты (POJO) не найден, все его записи (поля), которые могут достигать , только через карту (POJO) станут пригодными для сбора мусора.

Карты не лучше или хуже других классов в этом отношении.

+0

Я отправил статью, которая заставила меня поднять вопрос. Разумеется, по крайней мере, нам нужно быть осведомленным о том, что мы не потенциально ставим долгоживущий «StrongReference» в любой из временных временных карт «Карты» по умолчанию – avgvstvs

1

Я не покупаю сильный аргумент ссылки для использования Карт.

После того, как у вас нет ссылки на HashMap, он становится понятным для GC, и после этого все его элементы, на которые не ссылается что-то другое, также становятся понятными.

Для карты, которая имеет свои значения, пока у вас нет доступа к ним, ознакомьтесь с WeakHashMap.

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