Подходит ли этот сценарий для WeakReferences? - PullRequest
1 голос
/ 17 марта 2009

Я работаю над запросом адресной книги через J2ME и возвращаю кастом Hashtable, который я назову pimList . Ключи в pimList {имя, фамилия} отображаются на объект (мы назовем этот объект ContactInfo ), содержащий пары (ключ, значение), например. работа1 -> 44232454545, дом1 -> 44876887787

Далее я беру firstName и добавляю его в дерево. Узлы дерева содержат символы из firstName . например «Том» создал бы дерево с узлами:

"T"->"o"->"m"-> ContactInfo{ "work1" -> "44232454545", "home1" -> "44876887787" }

Таким образом, дочерний элемент последнего символа m указывает на тот же экземпляр объекта в pimList . Насколько я понимаю, цель WeakReferences заключается в том, чтобы указатель был слабым, а объект, на который он указывает, можно было легко GC'ed. В устройствах с ограничением памяти, таких как мобильные телефоны, я хотел бы убедиться, что я не протекаю и не теряю память. Таким образом, мне уместно сделать:

  1. pimList в качестве значений WeakReference
  2. Дочерний узел "m", указывающий на WeakReference

Ответы [ 3 ]

1 голос
/ 17 марта 2009

Не уверен, что я точно понял, что вы пытаетесь сделать, но достижимость объекта определяется самой сильной ссылкой на него (жесткая ссылка сильнее мягкой ссылки, которая сильнее слабой ссылки, которая сильнее фантомной ссылки).

Объекты с жесткой ссылкой не будут собираться мусором. Объекты с мягкой ссылкой будут собираться мусором только в том случае, если JVM не хватает памяти, объекты со слабыми ссылками будут собираться как можно быстрее (это теория, это зависит от реализации JVM и GC).

Так что обычно вы используете мягкую ссылку для построения кэша (вы хотите ссылаться на информацию как можно дольше). Вы используете слабую ссылку, чтобы связать информацию с объектом, на который жестко ссылаются где-то, поэтому, если на объект с жесткой ссылкой больше нет ссылки, связанная информация может быть собрана сборщиком мусора - используйте для этого weakhashmap.

надеюсь, это поможет ...

1 голос
/ 17 марта 2009

должно работать. Вам нужно будет обработать случай, когда вы используете возвращенный Hashtable, и все элементы собраны, однако ... что может означать, что вы хотите переосмыслить все это.

Если Hashtable недолговечен, то, скорее всего, в слабых ссылках нет необходимости.

Вы можете удалить элементы из Hashtable, когда закончите с ними, если вы хотите, чтобы они, возможно, были очищены, пока остальная часть Hashtable все еще используется.

0 голосов
/ 17 марта 2009

Я не уверен, что WeakMap здесь правильный. Если вы не держите сильные ссылки где-либо в вашем приложении, данные на карте исчезнут почти сразу, потому что никто не ссылается на них.

Слабая карта - это хорошая вещь, если вы хотите снова найти вещи, которые все еще используются в другом месте, и вы хотите иметь только один ее экземпляр.

Но я могу не правильно настроить ваши данные ... если честно.

...