1

我有一个 50GB 的文件,它是一个排序的 csv 文件。

如果我使用 C 或 java 使用内存映射访问对该文件执行查找,理论上会有什么不同吗?

我猜因为文件访问被推到操作系统级别,它真的不应该有太大的区别,对吗?

4

3 回答 3

2

理论上,由于Java 的面向对象的方法调用需要额外的间接调用,并且可能需要跨越 Java/JNI 边界,Java 将无限慢。

实践中,Hotspot 编译器优化了直接的 ByteBuffer 访问,页面错误的代价将远远超过额外的内存间接访问。

于 2013-03-25T15:19:40.163 回答
1

Java 一次只能映射 2 GB。这是因为 ByteBuffer 使用 32 位整数来表示长度、大小等。因此,您的 50 GB 文件需要 25 个 mmap。C 可以只创建一个 mmap,尽管它不能移植到 1990 年代的计算机(如果你关心的话)

于 2013-05-21T21:09:12.390 回答
1

直接回答问题。

Cmmap()和 JavaFileChannel.map()被认为是非常等价的,不会有显着的性能差异。

于 2013-03-25T16:06:47.610 回答