Submitted. :-)
I have another question. below remove code is correct. It is strange...
public Object remove( final Object key )
{
Object cr = m_newCache.get( key );
return m_newCache.remove( key );
}
----- Original Message -----
From: "MCCAY,LARRY (HP-NewJersey,ex2)" <[EMAIL PROTECTED]>
To: "'Avalon Developers List'" <[EMAIL PROTECTED]>
Sent: Thursday, January 10, 2002 1:12 PM
Subject: RE: excalibur.cache.LRUCachePolicy
> Eung-ju,
>
> I understand - sorry.
>
> Changed to use map.containsKey.
>
> enjoy.
>
> -Larry
>
> > -----Original Message-----
> > From: Eung-ju Park [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, January 08, 2002 7:25 PM
> > To: Avalon Developers List
> > Subject: Re: excalibur.cache.LRUCachePolicy
> >
> >
> >
> > ----- Original Message -----
> > From: "MCCAY,LARRY (HP-NewJersey,ex2)" <[EMAIL PROTECTED]>
> > To: "'Avalon Developers List'" <[EMAIL PROTECTED]>
> > Sent: Wednesday, January 09, 2002 7:43 AM
> > Subject: RE: excalibur.cache.LRUCachePolicy
> >
> >
> > > Eung-ju,
> > >
> > > > 1. ( null == map.get( key ) ) != ( map.containsKey( key ) )
> > > >
> > > > do not use null == map.get( key ) for cache item existence check.
> > > > DefaultCache.containsKey is misimplemented.
> > > I'm not sure what this is in reference to...
> >
> > public Object get( Object resourceName )
> > {
> > Object result = m_newCache.get(resourceName); // try new space
> > if (result != null)
> > return result;
> > result = m_oldCache.get(resourceName); // try old space
> > if (result != null)
> > {
> > if( size() > m_capacity ) // cache full?
> > {
> > copySpaces();
> > }
> > m_oldCache.remove( resourceName ); // remove from old space
> > m_newCache.put( resourceName, result ); // move to new space
> > }
> > return result;
> > }
> >
> > there is two item existence check.
> >
> > Object result = m_newCache.get(resourceName); // try new space
> > if (result != null)
> >
> > and
> >
> > result = m_oldCache.get(resourceName); // try old space
> > if (result != null)
> >
> > above is just null result check or item existence check?
> > below is right
> > code?
> >
> > if ( m_newCache.containsKey( resourceName ) )
> > {
> > return m_newCache.get( resourceName );
> > }
> >
> > if ( m_oldCache.containsKey( resourceName ) )
> > {
> > if ( isFull() )
> > {
> > copySpaces();
> > }
> > ....
> > ...
> > }
> >
> > >
> > > > 2. Why use ( size() > m_capacity )?
> > > > It is commented "cache full?"
> > > > isFull() is defined in AbstractCache like below
> > > Fixed - this was legacy code left over from a previous effort.
> > >
> > > > 3. How about FlipSpacesStore for its name?
> > > Done.
> > >
> > > Also, my reference to a 2 Data Spaces pattern refers to an algorthm
> > > typically used in garbage collection that is also known as
> > Two Space Copy
> > > and Stop and Copy Garbage Collection - the following link is an
> > interesting
> > > read:
> > > http://www.cs.brown.edu/courses/cs173/2000/Lectures/2000-11-20.pdf
> >
> > Thanks you.
> >
> > >
> > > enjoy.
> > >
> > > Larry
> > >
> > > > -----Original Message-----
> > > > From: Eung-ju Park [mailto:[EMAIL PROTECTED]]
> > > > Sent: Tuesday, January 08, 2002 7:25 AM
> > > > To: Avalon Developers List
> > > > Subject: Re: excalibur.cache.LRUCachePolicy
> > > >
> > > >
> > > > I see the source.
> > > >
> > > > 1. ( null == map.get( key ) ) != ( map.containsKey( key ) )
> > > >
> > > > do not use null == map.get( key ) for cache item existence check.
> > > > DefaultCache.containsKey is misimplemented.
> > > >
> > > > I will write more documentation. sorry.
> > > >
> > > > 2. Why use ( size() > m_capacity )?
> > > > It is commented "cache full?"
> > > > isFull() is defined in AbstractCache like below
> > > >
> > > > public boolean isFull()
> > > > {
> > > > return size() >= capacity();
> > > > }
> > > >
> > > > remove "cache full" comment if " (size() > m_capacity) "
> > > >
> > > > 3. How about FlipSpacesStore for its name?
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: "MCCAY,LARRY (HP-NewJersey,ex2)" <[EMAIL PROTECTED]>
> > > > To: "'Avalon Developers List'" <[EMAIL PROTECTED]>
> > > > Sent: Tuesday, January 08, 2002 2:35 AM
> > > > Subject: RE: excalibur.cache.LRUCachePolicy
> > > >
> > > >
> > > > > Eung-Ju,
> > > > >
> > > > > Attached is an implementation of a CacheStore that you may find
> > > > interesting.
> > > > >
> > > > >
> > > > > It does not, however, require a CachePolicy.
> > > > >
> > > > > It is based on the 2 Data Spaces pattern for LRU caching.
> > > > >
> > > > > I modified the LRUCacheTestCase just to test it before
> > > > sending it - I'll
> > > > let
> > > > > you determine if you actually roll it in.
> > > > >
> > > > > enjoy.
> > > > >
> > > > > Larry
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Eung-ju Park [mailto:[EMAIL PROTECTED]]
> > > > > > Sent: Monday, January 07, 2002 2:03 AM
> > > > > > To: Avalon Developers List
> > > > > > Subject: Re: excalibur.cache.LRUCachePolicy
> > > > > >
> > > > > >
> > > > > > Hi.
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: "Alexis Agahi" <[EMAIL PROTECTED]>
> > > > > > To: "'Avalon Developers List'" <[EMAIL PROTECTED]>
> > > > > > Sent: Monday, January 07, 2002 8:17 AM
> > > > > > Subject: excalibur.cache.LRUCachePolicy
> > > > > >
> > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > I've checked the cache implementation from
> > excalibur scratchpad
> > > > > > > and notice that LRUCachePolicy use the ListCachePolicy
> > > > LinkedList
> > > > > > > to perform the LRU mecanism.
> > > > > > >
> > > > > > > To have a LRU 'hit' effect, it removes the object
> > from the list
> > > > > > > and put it at the top.
> > > > > > > What if the list is really huge? I mean, to perform the
> > > > remove it
> > > > > >
> > > > > > It is not a Cache if it is really huge. ;-) Just kidding.
> > > > > >
> > > > > > > has to scan the whole list, since it doesn't have
> > an index (or
> > > > > > > I'm wrong)?
> > > > > > >
> > > > > > > I would suggest having another approach using a
> > logical clock
> > > > > > > value and 'time' hashmap.
> > > > > > >
> > > > > > > Something like:
> > > > > > > When a 'hit' is called, it gets the current object
> > and set its
> > > > > > > 'value' to the current logical time.
> > > > > > > To remove the oldest, it gets the oldest value in
> > the time map.
> > > > > > >
> > > > > > > To be really honest, this approach is not
> > necessarily the best:
> > > > > > > the remove case is slower that the linked list one, but
> > > > the 'hit'
> > > > > > > could be faster. Now it depends on the hit/remove
> > ratio. But I
> > > > > > > guess in an LRU cache, you should have a maximum of
> > 'hit' call.
> > > > > >
> > > > > > Yes. If you want that kind of ReplacementPolicy. Just
> > > > > > implement it. and use
> > > > > > like bellow.
> > > > > >
> > > > > > final Cache cache = new DefaultCache( new
> > TimeMapLRUCachePolicy(),
> > > > > > MemoryCacheStore( 1000000000 ) );
> > > > > >
> > > > > > and test it.
> > > > > > and send to this list.
> > > > > >
> > > > > > Thanks.
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Regards
> > > > > > >
> > > > > > > --
> > > > > > > mailto:[EMAIL PROTECTED] -
> > > > > > > http://sourceforge.net/projects/jabaserver
> > > > > > >
> > > > > > > --
> > > > > > > To unsubscribe, e-mail:
> > > > > > <mailto:[EMAIL PROTECTED]>
> > > > > > > For additional commands, e-mail:
> > > > > > <mailto:[EMAIL PROTECTED]>
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > To unsubscribe, e-mail:
> > > > > <mailto:[EMAIL PROTECTED]>
> > > > > For additional commands, e-mail:
> > > > <mailto:[EMAIL PROTECTED]>
> > > > >
> > > > >
> > > >
> > > >
> > > > --------------------------------------------------------------
> > > > --------------
> > > > ----
> > > >
> > > >
> > > > > --
> > > > > To unsubscribe, e-mail:
> > > > <mailto:[EMAIL PROTECTED]>
> > > > > For additional commands, e-mail:
> > > > <mailto:[EMAIL PROTECTED]>
> > > >
> > > >
> > > > --
> > > > To unsubscribe, e-mail:
> > > <mailto:[EMAIL PROTECTED]>
> > > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > >
> > >
> >
> >
> > --------------------------------------------------------------
> > --------------
> > ----
> >
> >
> > > --
> > > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
> >
> > --
> > To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
----------------------------------------------------------------------------
----
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>