es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El cierre de captura Lambda con Integer en flujo infinito arroja un error de OutOfMemoryError.

El código debajo lanza el error java.lang.OutOfMemoryError al 100%.

Set set = new HashSet<>();
new Random().ints(10_000_000,
Integer.MIN_VALUE,
Integer.MAX_VALUE)
.forEach(
v -> {
if(set.contains(v)){
System.out.println(v);
}else{
set.add(v);
}
}
);

Según tengo entendido, ¿es porque la lambda captura el Integer con contexto? ¿Alguien podría explicar qué sucede exactamente aquí?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Este código lanzará un java.lang.OutOfMemoryError porque el set está intentando almacenar 10 millones de enteros, lo que es demasiado para que la memoria lo maneje. La captura lambda no es la causa del error, sino el gran número de enteros que se están almacenando en el set.

Comments are closed.