( hory | 2018. 07. 17., k – 19:26 )

Haha, ez jo, megcsinaltam ugyanezt java + jmh -val:


    public static int[] f2(int x) {
        int[] back = new int[x];
        int backi = 0;

        for (int i = 0; i < x; i++)
            if (!ArrayUtils.contains(back, i)) back[backi++] = i;

        return ArrayUtils.subarray(back, 0, 10);
    }

    @Benchmark
    public void one2() {
        res = f2(20000)[0];
    }

    @Benchmark
    public void two2() {
        res = f2(20000)[0] + f2(20000)[1];
    }

eredmeny (1 core, 1 thread, egy 2014-es macbookon):


# Run complete. Total time: 00:01:24

Benchmark       Mode  Cnt   Score   Error  Units
VsPython.one2  thrpt   20  11.675 ± 0.228  ops/s
VsPython.two2  thrpt   20   5.735 ± 0.178  ops/s

Egyebkent IMHO logikus elvaras, hogy a fordito tudja/sejtse elore, ha egy metodus nem modosit allapotot (es ezen felul meg lehessen explicite mondani), es aszerint optimalizalja az ismetlodo hivasokat.
Valszeg megneztek ezt, BTW, csak a gyakorlatban eleg maceras ilyet stabilra megcsinalni, keves helyen lehet hasznalni, ott meg eccerubb megcsinalni kezzel.

De ez a pypy2 igen erosre sikerult! Eddig mindenhol azt lattam, hogy meg ha van is JIT, doglassu (lasd .net). Felteszem okkal nem hasznalja ezt mindenki, csak nem tudom, mi az :)

PS: teljes kod elerheto: https://github.com/agoston/benchmark/blob/master/src/test/java/com/bol/…