使用MappedByteBuffer要注意的问题

使用MappedByteBuffer来操作内存映射文件是NIO提供的强大武器,由于将对文件的操作映射到内存中,读写性能都会提高。需要注意的问题是,在MappedByteBuffer的javadoc中有这样一句:
* A mapped byte buffer and the file mapping that it represents remain
* valid until the buffer itself is garbage-collected.
这句话的意思如果一个MappedByteBuffer对象没有被垃圾回收,那么这个对象和他所代表的映射文件是一直有效的。
这意味着什么呢?这意味着一旦一个文件被映射为内存文件,即使你关闭了这个文件,该文件也无法再次被打开,直到文件所对应的MappedByteBuffer对象被GC,该文件会被系统释放,才可以再次打开。
目前没有有效方法解决这个问题,一个workaround是调用System.gc(),增加回收MappedByteBuffer对象的几率。然后sleep()几百毫秒,等待好消息。

你可能感兴趣的:(使用MappedByteBuffer要注意的问题)