org.apache.derby.impl.services.cache
Class ClockPolicy.Holder

java.lang.Object
  extended by org.apache.derby.impl.services.cache.ClockPolicy.Holder
All Implemented Interfaces:
ReplacementPolicy.Callback
Enclosing class:
ClockPolicy

private class ClockPolicy.Holder
extends java.lang.Object
implements ReplacementPolicy.Callback

Holder class which represents an entry in the cache. It maintains a recentlyUsed required by the clock algorithm. The class also implements the Callback interface, so that ConcurrentCache can notify the clock policy about events relevant to the clock algorithm.


Field Summary
private  CacheEntry entry
          Reference to the CacheEntry object held by this object.
private  boolean evicted
          Flag which tells whether this holder has been evicted from the clock.
private  Cacheable freedCacheable
          Cacheable object from a removed object.
(package private)  boolean recentlyUsed
          Flag indicating whether or not this entry has been accessed recently.
 
Constructor Summary
ClockPolicy.Holder(CacheEntry e)
           
 
Method Summary
 void access()
          Mark this entry as recently used.
(package private)  boolean evictIfFree()
          Evict this holder from the clock if it is not associated with an entry.
 void free()
          Mark this object as free and reusable.
(package private)  CacheEntry getEntry()
          Returns the entry that is currently associated with this holder.
(package private)  boolean isEvicted()
          Check whether this holder has been evicted from the clock.
(package private)  void setEvicted()
          Mark this holder as evicted from the clock, effectively preventing reuse of the holder.
(package private)  void switchEntry(CacheEntry e)
          Switch which entry the holder is associated with.
(package private)  boolean takeIfFree(CacheEntry e)
          Associate this holder with the specified entry if the holder is free (that is, not associated with any other entry).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

recentlyUsed

boolean recentlyUsed
Flag indicating whether or not this entry has been accessed recently. Should only be accessed/modified when the current thread has locked the CacheEntry object stored in the entry field.


entry

private CacheEntry entry
Reference to the CacheEntry object held by this object. The reference should only be accessed when the thread owns the monitor on this holder. A thread is only allowed to change the reference if it also has locked the entry that the reference points to (if the reference is non-null). This ensures that no other thread can disassociate a holder from its entry while the entry is locked, even though the monitor on the holder has been released.


freedCacheable

private Cacheable freedCacheable
Cacheable object from a removed object. If this object is non-null, entry must be null (which means that the holder is not associated with any object in the cache).


evicted

private boolean evicted
Flag which tells whether this holder has been evicted from the clock. If it has been evicted, it can't be reused when a new entry is inserted. Only the owner of this holder's monitor is allowed to access this variable.

Constructor Detail

ClockPolicy.Holder

ClockPolicy.Holder(CacheEntry e)
Method Detail

access

public void access()
Mark this entry as recently used. Caller must have locked entry.

Specified by:
access in interface ReplacementPolicy.Callback

free

public void free()
Mark this object as free and reusable. Caller must have locked entry.

Specified by:
free in interface ReplacementPolicy.Callback

takeIfFree

boolean takeIfFree(CacheEntry e)
Associate this holder with the specified entry if the holder is free (that is, not associated with any other entry).

Parameters:
e - the entry to associate the holder with (it must be locked by the current thread)
Returns:
true if the holder has been associated with the specified entry, false if someone else has taken it or the holder has been evicted from the clock

getEntry

CacheEntry getEntry()
Returns the entry that is currently associated with this holder.

Returns:
the associated entry

switchEntry

void switchEntry(CacheEntry e)
Switch which entry the holder is associated with. Will be called when we evict an entry to make room for a new one. When this method is called, the current thread must have locked both the entry that is evicted and the entry that is inserted.

Parameters:
e - the entry to associate this holder with

evictIfFree

boolean evictIfFree()
Evict this holder from the clock if it is not associated with an entry.

Returns:
true if the holder was successfully evicted, false otherwise

setEvicted

void setEvicted()
Mark this holder as evicted from the clock, effectively preventing reuse of the holder. Calling thread must have locked the holder's entry.


isEvicted

boolean isEvicted()
Check whether this holder has been evicted from the clock.

Returns:
true if it has been evicted, false otherwise

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.