<div dir="ltr"><div><div><div><div>Hello all,<br><br>I would like to ask you something regarding C1 compilation (VM options: -Xms769m -Xmx769m -XX:-TieredCompilation) of a Cartesian product stream operation with the new stream API. <br>
I have two versions of this computation, one handwritten and one with flatmap/map. It is remarkable that these two have similar performance so I would like to trace-back the JIT compilation decisions (apart from inlining), and more specifically if escape analysis has any effect.<br>
<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">...<br><br>valuesHi = IntStream.range(0, 10000).mapToLong(i -> i).toArray();<br>valuesLo = IntStream.range(0, 1000).mapToLong(i -> i).toArray();<br>
<br>@GenerateMicroBenchmark // -> 4.984 ms / op on avg<br>public long cartSeq() {<br>   long cart<br>         = LongStream.of(valuesHi)<br>            .flatMap(d -> LongStream.of(valuesLo).map(dP -> dP * d))<br>            .sum();       <br>
   return cart;<br>}<br><br>@GenerateMicroBenchmark // -> 4.258 ms / op on avg<br>public long cartBaseline() { <br>    long cart = 0;<br>    for (int d = 0 ; d < valuesHi.length ; d++) {<br>        for (int dp = 0 ; dp < valuesLo.length ; dp++){<br>
        cart += valuesHi[d] * valuesLo[dp];<br>        }<br>    }<br>    return cart;<br>}<br></blockquote><br></div><div>I've tested the code above with -XX:-DoEscapeAnalysis and I've got the same execution times, however I would like to confirm what happens.<br>
Regarding inlining, only by noticing the result of PrintInlining we 
conclude that cartSeq inlines all the nested forEachRemaining operations
 (of <span style="font-family:courier new,monospace">of</span>, <span style="font-family:courier new,monospace">flatmap</span>, <span style="font-family:courier new,monospace">map</span>), but is that the only optimization?</div>
<div><br></div><div>Thank you in advance!<br></div><div><br></div>Cheers,<br></div>Aggelos Biboudis<br></div></div></div>