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

Reply via email to