首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MappedByteBuffer滑动窗

MappedByteBuffer滑动窗
EN

Stack Overflow用户
提问于 2012-03-05 16:17:34
回答 1查看 999关注 0票数 6

是否有任何方法可以让MappedByteBuffer在文件上有一个滑动窗口。我有一个非常大的文件(20 at ),但我只想一次做100 at。我尝试过这样做--抛弃旧缓冲区,从香奈儿( chanel )创建一个新缓冲区,但这会消耗内存,因为旧缓冲区似乎没有被重用。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-03-05 16:41:11

您可以强制旧缓冲区立即释放内存。

代码语言:javascript
复制
((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://github.com/peter-lawrey/Java-Chronicle

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9570055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档