Beh no dai lo ho testato più volte, e anche con jvm diverse, come ho riportato. Confermo che si comporta così ogni volta.
Altre idee? On Fri, 16 Aug 2019, 17:36 Andrea Ligios [email protected] [it-torino-java-jug], <[email protected]> wrote: > > > 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 >> >> >
