On 19/01/10 3:34 AM, Andrus Adamchik wrote:
http://cayenne.apache.org/doc/objectcontext-memory-management.html

Wonder if we should go from WEAK to SOFT as a default policy for object
retention in the ObjectStore. I just got a few annoying cases of objects
being immediately gc'd after each request, so a new request looking them
up by id finds them in the shared cache instead of local (somewhat slow)
and then previously resolved to-many relationships are re-read anew
(very slow).

Of course locally I just switched my ObjectContext factory service to
use SOFT, so I am all set (I am yet to see it in production; wonder how
that affects already slow major GC cycles). But I am wondering if that
would make a better default policy for 3.1?

It would appear that soft is a better policy, as long as users are expecting 
that their JVM will continue to grow until it uses up all its memory. It may 
lead users to think at first that Cayenne has some sort of memory leak.

I found this interesting article discussing how the gc works with soft 
references:

  http://jeremymanson.blogspot.com/2009/07/how-hotspot-decides-to-clear_07.html

Because we could be generating objects very quickly (a big select on the 
database), how the gc does its magic is going to be very important. How will it 
keep up with the memory pressure of creating new objects at a high rate?

The comments on that page are interesting too: that the soft references are not 
thread safe. Does that affect us?

And the Google commons code is also interesting, with 
http://google-collections.googlecode.com/svn/trunk/src/com/google/common/base/FinalizableReferenceQueue.java


Ari


--
-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

Reply via email to