On 15.05.2016 10:39, Alain Stalder wrote:
Thanks, that clarifies a lot to me, especially SoftReference.

So with Groovy it is only realistic to have GC of classes (and attached
ClassInfo) kick in once a limit on Metaspace/PermGen (or Heap) is
reached - fine with me, no point to try to "outrun the bear"... :)

well... I do think the ClassValue version should not have this behaviour. But for this I think we would have to ensure not to keep any references to the ClassValue anywhere in a global strucutre. Not even as a WeakReference... PhantomReference would probably be ok... but I find the usages for PhantomReferences quite rare...and not fitting here I guess

A general question (current implementation and most likely APIs to keep
aside): Why does ClassInfo need a reference to the class? To me the use
case would be that you have an Groovy object or a Groovy class and want
to do something with it (call a static or instance method, for example),
so you only need to find ClassInfo from the class and then maybe pass
the class temporarily just for doing things, but don't need it a
reference back from ClassInfo.

ClassInfo represents a cached reflective information of a Class, plus some more internal stuff. To create that structure you need the Class. And if you do not want to do it eager, you need to keep a reference... at least till after init. Of course that does not have to be a SoftReference.

[...]
This allows, for example, two produce two of the known
"OutOfMemoryError: Metaspace|PermGen" issues with Groovy 2.4.6, as follows.
[...]

good job

bye Jochen

Reply via email to