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

Reply via email to