Oh - I see now that this is implemented already (optimizationOptions 
w/asmResolvingin:true).
Is there any reason this is not the default? Is it slower? Incorrect?

-Jesper

> On 24 May 2018, at 10.08, Jesper Steen Møller <jes...@selskabet.org> wrote:
> 
> Interesting! So let me get this straight: Are we using an actual "in-JVM" 
> classloader to load classes examined by the Groovy Compiler itself?
> In the Eclipse Java compiler, we don't actually load the classes into the 
> JVM, instead we have our own implementation of classpath traversal and read 
> it using ClassFileReader. Would a similar approach not work for constructing 
> ClassNodes in Groovy? (obviousluy using ASM to do the bytecode parsing 
> instead of rolling it ourselves).
> 
> JPMS would naturally make complicate things further, but again, ECJ has 
> cracked this, too.
> 
> -Jesper
> 
>> On 24 May 2018, at 08.30, Cédric Champeau <cchamp...@apache.org> wrote:
>> 
>> Hi folks,
>> 
>> I just wanted to share the result of profiling the performance of the 
>> compiler on "real world" classes, namely compiling the tests of Gradle. We 
>> have a lot of tests, so compilation times becomes really a pain point, so I 
>> have checked where we spend time. I have attached the export of hotspots 
>> from a real compilation session.
>> 
>> It's no surprise to me, most of the time (70%) is spent in the resolve 
>> visitor, and most of this time itself is spent in loading classes. We made 
>> some improvements in the past, by not initializing those classes, but it's 
>> still a crazy amount of time.
>> 
>> Similarly, we spend around 10% of our time in filling stack traces which are 
>> used for flow control. Unfortunately we don't have the opportunity to change 
>> this because it's either ClassNotFoundException (during resolution) sent by 
>> the classloader, or ANTLR recognition exception, used for flow control 
>> (duh!).
>> 
>> I remember that for Gradle I had implemented a custom ResolveVisitor that 
>> adds some assumptions for Gradle scripts to avoid too many lookups for 
>> classes which would obvisouly not exist, and it significantly improved the 
>> performance of compiling scripts, but that was because there were lots of 
>> implicit imports. For regular classes I'm not sure it's as simple.
>> 
>> Resolution is also very easy to break... Anyway, any change in this area 
>> would probably make the lives of our users better!
>> 
>> 
>> <CPU-hot-spots.txt>
> 

Reply via email to