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 > > >
