Avatar ·

Warum ist die bedingte Verarbeitung eines sortierten Arrays schneller als die eines unsortierten?

Hallo zusammen! Ich bin neu in Java und bin auf ein sehr seltsames Performance-Verhalten gestoßen. Ich habe einen einfachen Code, der die Elemente eines Arrays summiert, aber nur, wenn sie größer als ein bestimmter Schwellenwert sind. Mir ist aufgefallen, dass der Code etwa 2-3 mal schneller läuft, wenn das Array vorher sortiert wird! Hier ist mein Testcode:
import java.util.Arrays;
import java.util.Random;

public class BranchPredictionTest {
    public static void main(String[] args) {
        int arraySize = 100000;
        int[] data = new int[arraySize];
        Random random = new Random(12345);
        
        // Befülle das Array mit zufälligen Werten von 0 bis 255
        for (int i = 0; i < arraySize; i++) {
            data[i] = random.nextInt(256);
        }
        
        // Erstelle eine Ko