On 23.02.2018 23:24, Divij Vaidya wrote:

My name is Divij and I am working on an application which requires concurrent script compilation with a high throughput.

I am using version 2.4.12 and currently, I am not able to achieve high throughput because the threads are waiting at the synchronized code block at [1].

Can we run concurrent compilations? Sure
Can we run concurrent compilations using GCL as entry point... depends.

GroovyClassLoader can perform two tasks:
(1) create the class from a groovy source, if found (as well as recompilation)
(2) loading a class and if the class does not exist, create it using (1)

I think the API here requires rework. parseClass should, in that simple form be available through other means. And GCL should have it only internally. And that is because (2) requires us to think of certain rules, defined by how a classloader should behave. And why we obviously do violate some of the rules, one is, that without recompilation a loadClass call should return the same class.

Now assume the class does not exist and we compile it from source and there have been two parallel loadClass calls for this. The effect is that loadClass will return two different classes. That basically makes us require that synchronized block.

Why not use CompilationUnit directly?

bye Jochen

Reply via email to