73 votes

Pourquoi l'allocation d'un seul tableau 2D prend-elle plus de temps qu'une boucle allouant plusieurs tableaux 1D de même taille et forme totales ?

Je pensais qu'il serait plus rapide de créer directement, mais en fait, l'ajout de boucles ne prend que la moitié du temps. Qu'est-ce qui s'est passé qui a tellement ralenti?

Voici le code d'essai

 @BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class Test_newArray {
    private static int num = 10000;
    private static int length = 10;

    @Benchmark
    public static int[][] newArray() {
        return new int[num][length];
    }

    @Benchmark
    public static int[][] newArray2() {
        int[][] temps = new int[num][];
        for (int i = 0; i < temps.length; i++) {
            temps[i] = new int[length];
        }
        return temps;
    }

}

Les résultats des tests sont les suivants.

 Benchmark                Mode  Cnt    Score   Error  Units
Test_newArray.newArray   avgt   25  289.254 ± 4.982  us/op
Test_newArray.newArray2  avgt   25  114.364 ± 1.446  us/op

L'environnement de test est le suivant

Version JMH : 1.21

Version de la VM : JDK 1.8.0_212, VM serveur OpenJDK 64 bits, 25.212-b04

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X