Non credo che 10 volte siano abbastanza per far scattare Hotspot, quindi credo sia ancora a livello compilatore C1. Visti i tempi (100MS di differenza) mi pare più' facile che in sia un random GC. Se vuoi andare a fondo io inizierei a controllare i log CG.
Uberto On Fri, 16 Aug 2019 at 16:49, bruno bossola [email protected] [it-torino-java-jug] <[email protected]> wrote: > > > 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 > > >
