gpt4 book ai didi

java - MappedByteBuffer 清除缓存页面

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:25 25 4
gpt4 key购买 nike

我对 MappedByteBuffer 有一个问题,特别是它的内部工作方式。据我了解,缓存完全由操作系统完成。因此,如果我从文件中读取(使用 MappedByteBuffer),操作系统将从硬盘驱动器读取整个页面,并将该页面保存在 RAM 中,以便再次需要时更快地访问。这还允许为访问同一文件的多个应用程序/进程提供共享缓存。这是正确的吗?

如果是这样,如何才能使该缓存失效?仅重新初始化映射对象应该不起作用。我编写了一个从硬盘驱动器读取大量数据的应用程序。我需要做一些基准测试,所以我需要在需要时清除这个缓存。我尝试使用“echo 3 >/proc/sys/vm/drop_caches”,但这没有什么区别,所以我认为它不起作用。

最佳答案

This also allows to provide a shared cache for multiple applications/processes which access the same file. Is this correct?

这就是它在 Linux、Windows 和 MacOS 上的工作方式。在其他操作系统上,可能是相同的。

If so, how is it possible to invalidate this cache?

删除该文件,它将不再有效。

I need to do a few benchmarks, so I need to clear this cache when needed.

这就是操作系统的用途。如果您需要强制缓存无效,这很棘手并且完全取决于操作系统。

I've tried to use "echo 3 > /proc/sys/vm/drop_caches" but this doesn't make a difference so I think it is not working.

它可能对您的基准没有影响。我建议你查看 /proc/meminfo

Cached:           588104 kB
SwapCached: 264 kB
<小时/>

顺便说一句,如果你想取消映射 MappedByteBuffer,我会执行以下操作

public static void clean(ByteBuffer bb) {
if (bb instanceof DirectBuffer) {
Cleaner cl = ((DirectBuffer) bb).cleaner();
if (cl != null)
cl.clean();
}
}

这也适用于直接 ByteBuffer,但可能不适用于 Java 9,因为此接口(interface)将被删除。

关于java - MappedByteBuffer 清除缓存页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169217/

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