Stefano Mazzocchi wrote:

<snip/>

>
>Be careful when going down this road: the JLS doesn't say anything about
>'how' the weak references should be cleaned. And Java 1.3 implements it
>in the most memory efficient possible way: if the GC gets a weak
>reference, all of them are removed.
>
>Now, imagine the case: you have spent a couple of hours building up and
>tuning your cache using highly complex statistical analysis... but you
>saved them into a store that is implemented using weak references.
>
>You hit the heap ceiling and the GC kicks in.
>
>If finds one of those weak references, but it doesn't have the ability
>to ask you (well, the store) about 'which is weaker', so, wooosh,
>everything is gone.
>
>Sure, you probably collect 40Mb or heap, but then your perceived
>performance drops and your cache system works in a 'saw-like' figure
>
>
>cache size
> ^ 
> |     /|   /|
> |    / |  / |
> |   /  | /  |
> |  /   |/   |/
> +-----------------> time
>        ^
>    GC kicks in 
>
>and since the cache size is linearly proportional with the perceived
>efficiency of the cache, Cocoon will appear to be 'fast at times' (to be
>kind) or 'awefully bumping' (to be more reasonable).
>
>The solution I thought for this problem is simple but I don't know if it
>works (never tested it real life):
>
> 1) partition the memory store into 'clusters' which are connected using
>hard references.
>
> 2) these 'clusters' are the real containers of the stored entities and
>such entities are weak-referenced from the 'clusters'
>
>The idea is to have something like this:
>
> store +==> cluster +---> entity
>       |            +---> entity
>       |            +---> entity
>       |
>       +==> cluster +---> entity
>                    +---> entity
>                    +---> entity
>
>where:
> 
> ===> hard reference
> ---> soft reference
>
Are you meaning "soft" or "weak" reference ?

Soft references (java.lang.ref.SoftReference) should be good to look at, 
since the GC is smarter with them : only the least recently used 
references are cleared. The javadoc for SoftReference even gives some 
hints to implement caches.

Also, here are two cache systems I know of (without having studied 
them). Maybe they're worth looking at :
- http://jpolycache.sourceforge.net/
- http://www.opensymphony.com/oscache/

>
>
>and the key concept is that, whenever the GC needs to free some memory
>that is occupied by weak references, the avalanche cleanup will be
>'stopped' at a cluster level, saving the other clusters.
>
>Now, I'm not sure this works, but if it does, we have a reasonable
>solution to the problem.
>
>>Sorry for all that crap with Store and everything.
>>
>Don't worry, it takes time to do it right but I'm sure we'll get there.
>
>Probably we need to discuss its design *before* implementing it :)
>
Design before coding is always a good thing ;)

Sylvain

-- 
Sylvain Wallez
Anyware Technologies - http://www.anyware-tech.com




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to