[...]
> Could you describe in some
> more detail, what are "meta classes" in groovy runtime in terms of how
> they are generated (lazily at runtime or ahead of runtime?), what
> dependencies they can have and who is dependent on them. I assume they
> are generated at runtime, since if they were accessible as class files
> on the classpath of some loader, you would not have to design your own
> caching/loading/defining layer (Class.forName() would do). That's still
> an option if you create your own ClassLoader subclass that would use a
> naming convention (say groovymeta.some.pkg.ClassName would be the name
> of meta class "belonging" to some.pkg.ClassName main class) and use that
> ClassLoader as the class loader for groovy apps. But that's hard to
> enforce in various environments... So dynamic generation then.

a meta class in groovy is a class containing the information the runtime 
has about a class. That includes methods and properties (which might be 
added at runtime) and different other things. It is basically 
administrative stuff and an important element in caching. In Groovy3 a 
class can have more than one meta class, depending on the context the 
class is used in... but that is probably already more than enough 
detail. Important is that I don't generate classes for this at any time, 
the structure is represented by a bunch of classes from my runtime. It 
can be best compared with Class from Java Reflection.

The problem I have is, that if for example Object has a ClassValue based 
hard reference to MetaClass (my meta class class), then there will be 
always a class from the groovy runtime that stays referenced, thus not 
allowing it to be replaced or simply unloaded.

I was already wondering if I can just use a WeakReference to my 
MetaClass instance. But the isnstance could be collected before the 
runtime is not needed anymore. At least in some cases this is nor 
acceptable.

Just to make the problem more clear... Imagine there is some kind of 
App-Server and it laods something that uses Groovy, and maybe it loads 
this not at the system level, but per application and imagine the 
application is loaded and unloaded several times... a meta class is a 
large structure with a lot of objects. I could very easily write a 
Groovy script for such an environment that will eat up all the memory in 
this new meta class system while currently it should run with some big 
gc runs, but still run endlessly. For for example web applications this 
scenario is even likely to happen.

bye Jochen


_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to