Avatar ·

Por que o processamento condicional de um array ordenado é mais rápido do que de um array não ordenado?

Olá a todos! Sou novo em Java e me deparei com um comportamento de desempenho muito estranho. Tenho um código simples que soma os elementos de um array, mas apenas se eles forem maiores que um determinado limite. Notei que, se o array for pré-ordenado, o código executa cerca de 2 a 3 vezes mais rápido! Aqui está meu código de teste:
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);
        
        // Preenche o array com valores aleatórios de 0 a 255
        for (int i = 0; i < arraySize; i++) {
            data[i] = random.nextInt(256);
        }
        
        // Cria uma cópia e a ordena
        int[] sortedData = data.clone();
        Arrays.sort(sortedData);
        
        // Testa o array não ordenado
        long start = System.nanoTime();