Class WeakIdentityMap
- java.lang.Object
-
- org.eclipse.persistence.internal.identitymaps.AbstractIdentityMap
-
- org.eclipse.persistence.internal.identitymaps.FullIdentityMap
-
- org.eclipse.persistence.internal.identitymaps.WeakIdentityMap
-
- All Implemented Interfaces:
Serializable
,Cloneable
,IdentityMap
- Direct Known Subclasses:
HardCacheWeakIdentityMap
,SoftIdentityMap
public class WeakIdentityMap extends FullIdentityMap
Purpose: A WeakIdentityMap holds all objects referenced by the application only. The weak identity map is similar to the full identity map except for the fact that it allows full garbage collection.
Responsibilities:
- Guarantees identity.
- Allows garbage collection.
- Since:
- TOPLink/Java 1.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected int
cleanupCount
Keep track of a counter to amortize cleanup of dead cache keysprotected int
cleanupSize
PERF: Keep track of a cleanup size to avoid cleanup bottleneck for large caches.-
Fields inherited from class org.eclipse.persistence.internal.identitymaps.FullIdentityMap
cacheKeys
-
Fields inherited from class org.eclipse.persistence.internal.identitymaps.AbstractIdentityMap
descriptor, isIsolated, maxSize, session
-
-
Constructor Summary
Constructors Constructor Description WeakIdentityMap(int size, ClassDescriptor descriptor, AbstractSession session, boolean isolated)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
checkCleanup()
Check if garbage collected cache keys need to be cleaned up.protected void
cleanupDeadCacheKeys()
Search for any cache keys that have been garbage collected and remove them.CacheKey
createCacheKey(Object primaryKey, Object object, Object writeLockValue, long readTime)
Create the correct type of CacheKey for this map.protected CacheKey
putCacheKeyIfAbsent(CacheKey searchKey)
Need to check for cleanup on put.-
Methods inherited from class org.eclipse.persistence.internal.identitymaps.FullIdentityMap
clone, cloneKeys, collectLocks, elements, getCacheKey, getCacheKeys, getSize, getSize, keys, keys, lazyRelationshipLoaded, put, remove, resetCacheKey, setCacheKeys
-
Methods inherited from class org.eclipse.persistence.internal.identitymaps.AbstractIdentityMap
acquireDeferredLock, acquireLock, acquireLockNoWait, acquireLockWithWait, acquireReadLockOnCacheKey, acquireReadLockOnCacheKeyNoWait, containsKey, get, getAllCacheKeysFromIdentityMapWithEntityPK, getAllFromIdentityMapWithEntityPK, getCacheKeyForLock, getCacheKeyWithReadLock, getDefaultIdentityMapClass, getDescriptor, getDescriptorClass, getMaxSize, getWrapper, getWriteLockValue, release, remove, setDescriptor, setMaxSize, setWrapper, setWriteLockValue, toString, updateMaxSize
-
-
-
-
Constructor Detail
-
WeakIdentityMap
public WeakIdentityMap(int size, ClassDescriptor descriptor, AbstractSession session, boolean isolated)
-
-
Method Detail
-
cleanupDeadCacheKeys
protected void cleanupDeadCacheKeys()
Search for any cache keys that have been garbage collected and remove them. This must be done because although the objects held by the cache keys will garbage collect, the keys themselves will not and must be cleaned up. This is a linear operation so is amortized through the cleanupCount to occur only once per cycle averaging to make the total time still constant.
-
createCacheKey
public CacheKey createCacheKey(Object primaryKey, Object object, Object writeLockValue, long readTime)
Description copied from class:AbstractIdentityMap
Create the correct type of CacheKey for this map.- Overrides:
createCacheKey
in classAbstractIdentityMap
-
putCacheKeyIfAbsent
protected CacheKey putCacheKeyIfAbsent(CacheKey searchKey)
Need to check for cleanup on put.- Overrides:
putCacheKeyIfAbsent
in classFullIdentityMap
-
checkCleanup
protected void checkCleanup()
Check if garbage collected cache keys need to be cleaned up.
-
-