|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Genua : 4 Новичок
|
Июн 02, 2011 10:51 |
|
|
Eps, спасибо. Идея с сохранением информации об объектах в памяти ясна. Допустим у каждого объекта есть уникальный идентификатор, его можно использовать как ключ в карте, он же и будет искомой информацией об объекте при его поиске.
Ddrad, рад буду помочь когда что нибудь толковое наработаю, пока что сам кучу непоняток пытаюсь преодолеть. Предлагаю, пока что объедиить усилия и разработать наиболее рациональный алгоритм - если уж эта тема на форуме настолько долгоиграющая, пусть здесь останутся наработки коллективного разума об алгоритме, а не просто ссылка на чью то реализацию, которая со временем и вовсе протухает.
Мои мысли следующие (парни, надеюсь на конструктивную критику):
1.решил взять за основу класс производный от LinkedHashMap. Помимо всех очевидных факторов в пользу его, он еще и умеет сам определять, какой из элементов является последним, и, если не ошибаюсь, при каждом обращении к набору перестраивает элементы в прядке обращения к ним. Таким образом отпадает необходимость реализовывать атрибут время_обращения_к_записи.
2.Каждый кэшируемый объект должен обладать UID, который станет ключом в карте. Выбор атрибута объекта для использования в качестве ключа - на вкус каждого. Суть использования данного ключа в качестве информации о сериализованном объекте следующая:
- кэш первого уровня заполняется парами ключ-значение(значением естественно является наш объект) на глубину равную размеру первого уровня, как только этот размер превышается, объекты из первого уровня переносятся во второй, на первом уровне значение элемента обнуляется, но сохраняется его ключ. Таким образом при попадании в кэш, если значение для данного ключа нулевое, это будет сигналом того что объект расположен на втором уровне. И включается алгоритм работы со вторым уровнем - эта часть для меня пока что полна сомнений, т.к..
3. ..т.к. при попадании в кэш второго уровня, данный объект нужно переместить в область MRU, которая является первым уровнем кэша, и наоборот, один из элементов первого уровня, должен будет сместиться во второй.. единственная моя мысль - слить объекты обоих уровней в одну коллекцию (локальную копию, скорее всего такой же линкедхешмеп), произвести обращение (при этом объекты перестроятся), и затем заново залить их на первый уровень (это метод первоначального заполнения кэша, самые старые из объектов при этом "уйдут" на второй уровень). Что мне тут не нравится, так это копирование всех объектов в локальную копию и обратно. Может у кого появится идея получше?
Пока все. Жду разноса, поправок, дополнений. |
|
|
|
 |
|
|
|