Class ObjectProxyCache<T,A>
- Type Parameters:
T
- the TA
- the A
Maps Java objects to their proxies. Combines elements of WeakHashMap and ConcurrentHashMap to permit unsynchronized reads. May be configured to use either Weak (the default) or Soft references.
Note that both Java objects and their proxies are held by weak/soft references; because proxies (currently) keep strong references to their Java objects, if we kept strong references to them the Java objects would never be gc'ed. This presents a problem in the case where a user passes a Rubified Java object out to Java but keeps no reference in Ruby to the proxy; if the object is returned to Ruby after its proxy has been gc'ed, a new (and possibly very wrong, in the case of JRuby-defined subclasses) proxy will be created. Use of soft references may help reduce the likelihood of this occurring; users may be advised to keep Ruby-side references to prevent it occurring altogether.
- Author:
- Bill Dortch
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionObjectProxyCache
(int numSegments, int initialSegCapacity, ObjectProxyCache.ReferenceType refType) -
Method Summary
-
Constructor Details
-
ObjectProxyCache
public ObjectProxyCache() -
ObjectProxyCache
-
ObjectProxyCache
public ObjectProxyCache(int numSegments, int initialSegCapacity, ObjectProxyCache.ReferenceType refType)
-
-
Method Details
-
allocateProxy
-
get
-
getOrCreate
-
put
-
size
public int size()Returns the approximate size (elements in use) of the cache. The sizes of the segments are summed. No effort is made to synchronize across segments, so the value returned may differ from the actual size at any point in time.- Returns:
-
stats
-