QueryValueHolder Strategy for Better Memory Management [message #388460] |
Fri, 29 May 2009 20:20  |
Eclipse User |
|
|
|
We've been using TopLink (EclipseLink now) for 6 years and have a very
large application with hundreds of tables mapped.
In addition to the large number of objects, our persistence framework has
a lot of interlinking (many 1-M and 1-1 back reference mappings throughout
the application). The object graph that is loaded into memory is extremely
intertwined.
In instances of our application where datasets are very large we are
running into the situation where the GC cannot free memory because active
threads retain hard references to objects, which, because of
QueryValueHolder, retains hard references to related objects throughout
our object model. This is true regardless of the setting in the
IdentityMap.
For several reasons not worth exploring on this thread, we cannot remove
these ValueHolder references.
An interesting idea came out of our internal discussions and I wanted to
post it to this forum to learn if this approach had any merit.
We would like to create an implementation of ValueHolder (we would assume
QueryValueHolder) with the following properties:
1) It would have a "reinitialize()" method that would release it's hold on
any loaded objects and be treated as if it had never loaded anything from
the DB.
2) Have the ValueHolder retain the reference to these objects via a
WeakReference so that these relationships could be GC'd (and reloaded, if
necessary).
Would this approach be worth exploring? What would break?
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05264 seconds