Prevent OutOfMemory cuando se usa java.nio.MappedByteBuffer

a aplicación @Consider, que crea 5-6 hilos, cada hilo en ciclo asigna MappedByteBuffer para un tamaño de página de 5mb.

MappedByteBuffer b = ch.map(FileChannel.MapMode.READ_ONLY, r, 1024*1024*5);

Sooner o posterior, cuando la aplicación funciona con archivos grandes, se lanza oom

java.io.IOException: Map failed  at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:758)
Caused by: java.lang.OutOfMemoryError: Map failed
        at sun.nio.ch.FileChannelImpl.map0(Native Method)
        at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)

Según la especificación, MappedBuffer debe eliminar la memoria directa tan pronto como sea el GC. Parece que el problema es que los MappedBuffer-s son GC-ed demasiado tarde, luego la memoria directa ha terminado.

¿Cómo evitar esta situación? Probablemente diga MappedBuffer para disponer implícitamente o use algún tipo de grupo de MappedBuffer

Respuestas a la pregunta(8)

Su respuesta a la pregunta