Encontrar la lista de números primos en el menor tiempo

Leí muchos algoritmos para encontrar números primos y la conclusión es que un número es un número primo si no es divisible por ninguno de sus números primos anteriores.

No soy capaz de encontrar una definición más precisa. En base a esto, he escrito un código y funciona satisfactoriamente hasta que el número máximo que paso es 1000000. Pero creo que hay algoritmos mucho más rápidos para encontrar todos los números primos menores que un número dado.

A continuación está mi código, ¿puedo tener una mejor versión del mismo?

 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;
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta