Request for comments, very slow compilation with super-overloaded methods

Adam Domurad adomurad at
Wed May 29 12:09:33 PDT 2013

Hi, see attached containing &, taken from Groovy sourcecode.
They exhibit a case with which javac performs very badly.

  javac #Not too bad
  javac # But this takes many minutes

Note that MethodHandle references ArrayUtil, and this is auto-generated 

ECJ compiles this source code in ~4 seconds.

This problem is present in JDK8 and JDK7.

      - The performance problem stems from 
This is used during method resolution, and is performed O(n^2) times for 
'n' same-name methods. It references rather expensive methods that 
iterate over and potentially copy (eg for erasure) both argument lists, 
which can be up to 255 elements in this case.
      - MethodHandle references a method from ArrayUtil that has 255 
candidates; this is many orders of magnitude slower than it should be.

I have attached a patch that does a hackish fix, by providing a fast 
route for when method is obviously not a sub-signature of another.
The patch is mainly there as a proof-of-concept (its rather slapped on), 
hopefully someone knows a better way to fix these corner cases?

I am rather dubious about argument lists pervasively being treated as 
singly-linked lists. It makes certain operations quite costly, even 
changing the complexity of them unfavourably.

Happy hacking,

-------------- next part --------------
A non-text attachment was scrubbed...
Name: buffer-method-argument-length.patch
Type: text/x-patch
Size: 1373 bytes
Desc: not available
Url : 
-------------- next part --------------
A non-text attachment was scrubbed...
Type: application/zip
Size: 13916 bytes
Desc: not available
Url : 

More information about the compiler-dev mailing list