gpt4 book ai didi

java - MappedByteBuffer 滑动窗口

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:44 25 4
gpt4 key购买 nike

有什么方法可以让 MappedByteBuffer 在文件上有一个滑动窗口。我有一个非常大的文件 (20GB),但我一次只想制作 100MB。我试过这只是丢弃旧缓冲区并从 channel 创建一个新缓冲区,但这会占用内存,因为旧缓冲区似乎没有被重用。

有什么想法吗?

最佳答案

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

((DirectBuffer) buffer).cleaner().clean();

免责声明:我只将它用于 Sun/Oracle/OpenJDK Java 6 update 18 及更高版本。它可能无法在旧版本或其他平台上使用或无法正常工作。谢谢@EJP。


除非你有一个 32 位操作系统,否则我会直接将整个文件映射到内存中(使用多个映射)这将更有效且更易于管理。在这种情况下,我只清理 ByteBuffers 作为关闭文件的一部分(在单元测试中)

您可以使用 TB 的虚拟内存,并使用很少的物理空间甚至磁盘空间。在此示例中,我在具有 24 GB 内存和 120 GB 驱动器的计算机上映射 8 TB 虚拟内存。

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

关于java - MappedByteBuffer 滑动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com