3.1. | Does JBoss Cache support eviction policies? |
| Yes. JBoss Cache currently supports multiple eviction policies such as LRU, MRU, and FIFO.
Users can also plug in their own eviction policy algorithms. See user
guide for details.
|
3.2. | Does JBoss Cache's eviction policy operates in
replication mode?
|
| Yes and no. :-) The eviction policy only operates in local mode. That is, nodes are
only evicted locally. This may cause the cache contents not to be
synchronized temporarily. But when a user tries to obtain the cached
contents of an evicted node and finds out that is null (e.g.,
get
returns null), it should get it from the
other data source and re-populate the data in the cache. During this
moment, the node content will be propagated and the cache content
will be in sync.
However, you still can run eviction policies with cache mode
set to either
REPL_SYNC
or
REPL_ASYNC
. Depending on your use case, you can
set multiple cache instances to have their own eviction policy
(which are applied locally) or just have selected instances with
eviction policies activated.
Also note that, with cache loader option, a locally evicted
node can also be persisted to the backend store and a user can
retrieve it from the store later on.
|
3.3. | Does JBoss Cache support
Region
?
|
| Yes. JBoss Cache has the notion of region where a user can
configure the eviction policy parameters (e.g.,
maxNodes
or
timeToIdleSeconds
)
A region in JBoss Cache denotes a portion of tree hierarchy,
e.g., a fully qualified name (
org.jboss.cache.Fqn
). For example,
a user can define
/org/jboss
and
/org/foocom
as two separate regions. But note
that you can configure the region programmatically now, i.e.,
everything has to be configured through the xml file.
|
3.4. | I have turned on the eviction policy, why do I still get "out
of memory" (OOM) exception?
|
| OOM can happen when the speed of cache access exceeds the
speed of eviction policy handling timer. Eviction policy handler
will wake up every
wakeUpInterval
milliseconds (or
wakeUpIntervalSeconds
seconds, prior to 3.x)
to process the eviction event queue. So when the queue size is full, it will create a
backlog and cause out-of-memory exceptions to happen unless the eviction timer catches
up. To address this problem, in addition to increase the VM heap
size, you can also reduce the
wakeUpInterval
so the timer thread
processes the queue more frequently.
|