-1

当使用 Java(或任何语言)读取文件时,数据是否从磁盘复制到应用程序级缓冲区之外的内存?例如,当我执行以下操作时,会生成多少个数据副本:

FileInputStream fileReader = new FileInputStream(new File("/path/to/file"));
byte[] buffer = new byte[4096];
fileReader.read(buffer);

除了从磁盘写入缓冲区的数据副本之外,数据是否也被操作系统或文件系统缓存?

4

1 回答 1

2

简答

也许

长答案

这取决于操作系统和文件系统选择从磁盘或类似磁盘的设备读取时创建任何特定数据的多少副本。所有现代桌面文件系统都有一个读/写缓冲区,用于在应用程序级别和物理设备级别之间缓存数据。移动设备和嵌入式设备通常没有这一层,因为它们写入的是基于内存的设备,而不是物理旋转磁盘。

我认为随着 SSD 设备变得更大、更便宜,桌面设备上的这种缓存级别会变得更小,或者完全消失,因为 SSD 设备没有与旋转磁盘相同的速度问题。它们仍然比主内存慢,但它们不应该需要由于旋转媒体的缓慢访问速度而进行的积极缓存。

于 2013-01-02T22:24:05.410 回答