cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vadim Gritsenko <va...@reverycodes.com>
Subject Re: StoreJanitor
Date Thu, 05 Apr 2007 13:48:24 GMT
Ard Schrijvers wrote:
>> IIUC, EHCache allows you to set only the number of items in cache, and not
>> the maximum amount of memory to use, or minimum amount of free memory to
>> leave.
> 
> true (but the cache can't know the size of objects it gets stuffed with  (you
> say it is possible with java 1.5? ) )

No this information is not available, IIUC, via any published API.


>> In other words, EHCache leaves you up for guessing what the number should
>> be. It should not do this. Maximum number of items in memory should be
>> whatever memory can bear, and cache should dump unused memory once free 
>> memory goes low.
> 
> I do not agree. This would imply a JVM always reaching max memory while this
> is not necessary.

If there is a memory available to JVM you better make good use of it. What good 
memory does if it is not used? Please clarify.


> Think you are talking about a SoftReferences cache based,

No, SoftRefs are cleared in undefined order, which is not much better than 
existing Janitor+EHCache combo.


> but apart from some drawbacks, the eviction policy is very hard to implement
> because you do not kwow which reference the jvm throws away.

Yep.

What I was talking about is using this Java 1.5 API:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html#UsageThreshold
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html#ThresholdNotification

It was on my TODO list for a long time now...


> IMO, the cache configuration, like maxelements (memory) and maxdiskelements
> should be modifable during run time, but, this is not possible with ehcache
> or jcs.

No real objection here. But you would not need this if StoreJanitor functions 
correctly.


>> Granted it can't be implemented cleanly in Java 1.4 (hence thread +
>> interval hack) but on Java 1.5 it would work beautifully. All you need is a
>> stinking API to clean out entries using LRU algorithm (or whatever is 
>> chosen). Or just switch to Cocoon's cache in the meantime.
> 
> I haven't got problems with jcs if you know how large your stores can be
> (crawler test and default sizes i have configured for different jvm mem
> values).

That's exactly my point. You gotta spend non trivial amount of time tuning your 
store configuration when this all can be done automatically by using correct SJ 
implementation / caches.


> Throwing away all cache experience of others and switch to cocoon
> cache does't seem to make sense to me

Throwing away working system and jumping on incorrectly functioning 
implementation is even worse :)


>>> JCS will probably do the same. I guess that original purpose of 
>>> StoreJanitor was when Cocoon had its own store implementations 
>>> (transient, persistent) and we had to take care of cleaning
>>> them up in our code.
>> It still does, and at the moment is easier to live with than EHCache -- as
>> shown by Ard in this email.
> 
> Jcs does not give me any problems (except headache in configuration :-) )

Exactly.

Vadim

Mime
View raw message