NIO MappedByteBuffer

Olá pessoal,

Estou utilizando o MappedByteBuffer do NIO para carregar arquivos na memoria. Meus arquivos possuem mais de 15 mega. Reparticiono o arquivo e m blocos de MappedByteBuffer para agilizar o processo mas a minha memoria estora porque nom consigo liberar os outros MappedByteBuffer. resumindo existe alguma forma de desalocar um MappedByteBuffer da memória ?

Abraçcos

A mapped byte buffer and the file mapping that it represents remain valid until the buffer itself is garbage-collected.

java.nio.channels.FileChannel tem um método “map” mas não um “unmap”, portanto você vai ter de fechar o arquivo e remover todas as referências ao MappedByteBuffer (talvez haja alguma referência indireta que você tenha deixado no seu programa).

Outra pergunta: o MappedByteBuffer te acesso direto a memoria do SO
sem passar pelo heap do Java certo ?
Então como o GC vai desalocar essa memoria da memoria fisica do SO ?

Não vi o fonte da implementação da Sun (baixei os fontes SCSL da versão 1.4 e 5.0) , mas pelo que imagino, o método finalize dessa classe deve chamar algum método nativo que efetua essa desalocação de memória física ou simplesmente o “unmapping”. É questão de ler os fontes.