Creación de una fuga de memoria con Java
Acabo de tener una entrevista y me han pedido que cree una fuga de memoria con Java.
No hace falta decir que me sentí bastante tonto al no tener ni idea de cómo empezar a crear una.
¿Cuál sería un ejemplo?
3065
3
Una cosa sencilla es utilizar un HashSet con un
hashCode()
oequals()
incorrecto (o inexistente), y luego seguir añadiendo "duplicados". En lugar de ignorar los duplicados como debería, el conjunto sólo crecerá y no podrás eliminarlos.Si quieres que estas claves/elementos malos permanezcan, puedes usar un campo estático como
¿Tal vez utilizando código nativo externo a través de JNI?
Con Java puro, es casi imposible.
Pero se trata de un tipo de fuga de memoria "estándar", cuando ya no se puede acceder a la memoria, pero sigue siendo propiedad de la aplicación. En cambio, puedes mantener referencias a objetos no utilizados, o abrir flujos sin cerrarlos después.
Crea un Mapa estático y sigue añadiendo referencias duras a él. Esas nunca serán GC's.