Hi,
we have spiked using Groovy 4.0.0-beta-1 with our Groovy framework, to
see if the GString improvements would lead to a speedup in our SQL
generation code (typically this is irrelevant, and performance is solely
decided by SQL optimizations, but we have recently come across a few
cases in practice where performance was not bound SQL execution but by
the SQL generating code itself).
We had to find workarounds for a few problems (tickets coming), but
overall it was much faster/hassle free to get Groovy 4 up and running
compared to our recent switch to from Froovy 2.5 to 3, which was nice :-)
Alas performance-wise what we surprisingly found was, that the
performance of our main web application dropped by a factor of 2 (table
refresh) to 3 (startup).
Executing our test suite showed a similar picture. Since no immediate
source for this performance drop emerged, we checked the performance of
Groovy 3 Indy, more to rule out that the performance reduction had
something to do with invokedynamic;
as can be seen in the table below, to our surprise performance
degradiation of Groovy 3.0.9 with full invokedynamic (Groovy JARs &
IntelliJ compiler switch/checkbox active) was in fact in most cases
close to the one seen with Groovy 4.0.0-beta-1, pointing to
invokedynamic as the potential cause.
Right now it looks to us, as if Groovy with invokedynamic for us is just
"leaking performance everywhere", with no clear source.
Speed changes range from about 0.6 (i.e. a speedup) to about 5.0, with a
large bias towards a slowdown by a factor of 2.0 to 2.5. The overall
time of the test suite increased by a factor of 2.37 (G3 Indy) and 2.45
(G4) respectively.
Any ideas what could be the cause of this unexpected slowdown or where
we should put our focus in analyzing this, to create a test case
independent of our framwork ?
Cheers,
mg
*Groovy 3.0.9 [s]* *Groovy 3.0.9 INDY [s]* *Groovy 4.0.0-beta-1 [s]*
*G3INDY/G3 Ratio* *G4/G3 Ratio*
3038 7200 7440 2.37 2.45
160.146 482.584 467.058 3.01 2.92
115.595 388.332 387.82 3.36 3.35
88.955 141.595 142.205 1.59 1.60
94.743 139.676 138.553 1.47 1.46
65.338 109.143 130.918 1.67 2.00
117.108 129.789 116.748 1.11 1.00
74.182 115.142 110.801 1.55 1.49
30.653 104.733 101.138 3.42 3.30
24.71 80.171 72.541 3.24 2.94
22.586 59.167 60.043 2.62 2.66
41.302 46.675 46.682 1.13 1.13
5.34 51.456 46.045 9.64 8.62
14.066 41.788 43.987 2.97 3.13
20.535 42.441 42.571 2.07 2.07
19.582 43.338 42.493 2.21 2.17
19.937 43.235 42.361 2.17 2.12
23.118 40.245 42.206 1.74 1.83
14.777 34.526 33.725 2.34 2.28
15.23 31.757 33.302 2.09 2.19
15.813 34.246 30.699 2.17 1.94
18.743 33.892 30.436 1.81 1.62
14.855 30.105 27.19 2.03 1.83
10.775 28.514 25.813 2.65 2.40
10.571 26.344 23.289 2.49 2.20
8.084 21.218 21.675 2.62 2.68
9.155 21.571 21.299 2.36 2.33
5.454 18.296 19.425 3.35 3.56
12.987 18.841 18.537 1.45 1.43
10.928 17.93 17.987 1.64 1.65
10.501 9.792 14.374 0.93 1.37
9.455 14.174 14.038 1.50 1.48
3.19 12.39 13.79 3.88 4.32
10.006 13.961 13.264 1.40 1.33
22.858 14.48 13.073 0.63 0.57
4.592 10.176 12.777 2.22 2.78
8.991 12.932 11.908 1.44 1.32
17.245 10.591 10.746 0.61 0.62
2.331 11.443 10.497 4.91 4.50
11.159 10.205 9.911 0.91 0.89
2.362 20.721 9.744 8.77 4.13
9.369 7.543 9.097 0.81 0.97
1.845 9.353 8.483 5.07 4.60
4.647 5.537 8.065 1.19 1.74
8.758 8.806 7.664 1.01 0.88
10.359 9.95 7.657 0.96 0.74
8.954 8.764 7.38 0.98 0.82
2.424 7.37 6.941 3.04 2.86
6.75 6.771 6.84 1.00 1.01
7.476 5.179 6.679 0.69 0.89
1.873 6.785 6.64 3.62 3.55
8.13 5.896 6.564 0.73 0.81
6.892 5.189 6.385 0.75 0.93
5.91 6.153 6.2 1.04 1.05
1.318 4.944 5.585 3.75 4.24