Encontrar a lista de números primos no menor tempo

Eu leio muitos algoritmos para encontrar números primos e a conclusão é que um número é um número primo se não for divisível por nenhum de seus números primos anteriores.

Não consigo encontrar uma definição mais precisa. Com base nisso, eu escrevi um código e ele funciona satisfatoriamente até que o número máximo que eu passe seja 1000000. Mas eu acredito que há algoritmos muito mais rápidos para encontrar todos os primos menores que um determinado número.

Segue o meu código, posso ter uma versão melhor do mesmo?

 public static void main(String[] args) {
    for (int i = 2; i < 100000; i++) {
        if (checkMod(i)) {
            primes.add(i);
        }
    }
}

private static boolean checkMod( int num) {
    for (int i : primes){
        if( num % i == 0){
            return false;
        }
    }
    return true;
}

questionAnswers(5)

yourAnswerToTheQuestion