A me fa il contrario, ci mette di più il primo snippet, e solo la prima
volta:

[image: immagine.png]

Su IDEONE, invece, sono uguali da subito: https://ideone.com/MRW3Mo

Suppongo sia solo la JVM che a causa del bootstrap dà risultati
incosistenti,
se li testi uno per volta partendo a JVM spenta probabilmente saranno
entrambi alti.

Ciao


Il giorno ven 16 ago 2019 alle ore 17:50 bruno bossola [email protected]
[it-torino-java-jug] <[email protected]> ha scritto:

>
>
> Non capisco cosa sta succedendo! Allora, io le lambda le uso senza farmi
> tante domande, ma oggi devo farmene una. Guardate il codice (scusate, e'
> pecoreccio), provatelo anche voi... come mai la seconda esecuzione dura di
> piu'? Cosa sto sbagliando?
>
> In pratica eseguendo il mio test la forma:
>
> foo(() -> new Consumer(){})
>
> sembra *piu' veloce *di
>
> foo(() -> {})
>
> (cioe' *la seconda ci mette piu' del doppio *con Java8)
>
> Boh? L'unica cosa che posso pensate e' che il JIT interagisca in modo
> differente: lanciando infatti il test in un ciclo 10 volte, la seconda
> versione ha, dopo la prima esecuzione, piu' o meno gli stessi tempi della
> prima.
>
>
> package spikes;
>
> import java.util.function.Consumer;
>
> public class TestLambda {
>
>     public static void main(String[] args)  {
>         long now;
>
>         now = System.currentTimeMillis();
>         foo(new Consumer<String>(){
>             @Override
>             public void accept(String text) {
>             }});
>         System.err.println("Elapsed:
> "+(System.currentTimeMillis()-now)+"ms");
>
>
>         now = System.currentTimeMillis();
>         foo(text ->  {});
>         System.err.println("Elapsed:
> "+(System.currentTimeMillis()-now)+"ms");
>
>     }
>
>     static void foo(Consumer<String> consumer) {
>         for (int i=0; i<10; i++) {
>             try {
>                 Thread.sleep(5);
>             } catch (InterruptedException ignore) {
>                 // sorry this is a test
>             }
>
>             consumer.accept("");
>         }
>     }
> }
>
> Con Java8, openjdk version "1.8.0_202"):
> $ java spikes/TestLambda
> Elapsed: 51ms
> Elapsed: *154ms*
>
> Output con Java11, openjdk version "11.0.2",  18..9 (build 11.0.2+9):
> $ java spikes/TestLambda
> Elapsed: 52ms
> Elapsed: *80ms*
>
> Output con Java 12, openjdk "zulu" version "12.0.2", Zulu12.3+11-CA (build
> 12.0.2+3)
> $ java spikes/TestLambda
> Elapsed: 52ms
> Elapsed: *71ms*
>
> Ciao,
>
>    Bruno
>
> 
>

Reply via email to