是否有任何方法可以让MappedByteBuffer在文件上有一个滑动窗口。我有一个非常大的文件(20 at ),但我只想一次做100 at。我尝试过这样做--抛弃旧缓冲区,从香奈儿( chanel )创建一个新缓冲区,但这会消耗内存,因为旧缓冲区似乎没有被重用。
有什么想法吗?
发布于 2012-03-05 16:41:11
您可以强制旧缓冲区立即释放内存。
((DirectBuffer) buffer).cleaner().clean();免责声明:我只在Sun/Oracle/OpenJDK 6更新18及更高版本中使用过此方法。它可能无法使用,也可能无法在旧版本或其他平台上正确工作。谢谢你@EJP。
除非您有一个32位的操作系统,否则我只需将整个文件映射到内存中(使用多个映射)--这将更有效,更容易管理。在这种情况下,我只清理ByteBuffers作为关闭文件的一部分(在单元测试中)。
您可以使用TB的虚拟内存,使用很少的物理空间,甚至磁盘空间。在本例中,我将8TB虚拟内存映射到具有24 GB内存和120 GB驱动器的计算机上。
http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
总之:在64位机器上,虚拟内存非常便宜,你不必担心。
顺便说一句:大多数64位机器实际上仅限于48位虚拟内存。这是256 TB的限制,而不是理论上他们可以解决的16 EB (18,000,000 TB)。
你可能会觉得这个图书馆很有趣。我之前没有提到它,因为它可能不适合您,但是您可能会发现我在代码中使用的方法和一些技术很有趣。
https://stackoverflow.com/questions/9570055
复制相似问题