From: <Mat...@i2...> - 2003-08-14 23:08:06
|
Hi all, We have a embedded jython framework which runs each jython interpreter in its own threadgroup/thread. As a result, we get reasonable startup performance for each new interpreter, but still get some segregation between them. Each interpreter also has its own custom sys.classLoader and sys.packageManager to handle dynamic changes to the classpath independently for each interpreter. This is all working great, however, I recently ran into a memory exhaustion scenario, and after tracking down all my own leaks, I found that the architecture of the jython engine was also causing me some problems. Specifically, PyJavaClass has the member "private static InternalTables tbl " which seems to cache a mapping between java classes and their PyJavaClasses. This is causing me grief because the PyJavaClass holds on to a reference to its package manager, which is my custom package manager, which holds on to a large amount of data (basically all the packages and classes for the classpath for the interpreter, which can be very large as we have some giant classpaths), and thus memory can be exhausted pretty quick. Is there an easy way to solve this? Should the tbl member instead of being static be like PySystemState which is thread dependent? Matt |