在执行mmap时,C或Java会有任何显着的性能差异吗?

时间:2013-03-25 14:50:45

标签: java c mmap memory-mapped-files

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

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

我猜测,因为文件访问被推到了操作系统级别,所以它真的不应该做出很大的改变吗?

3 个答案:

答案 0 :(得分:2)

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

practice 中,Hotspot编译器优化了直接的ByteBuffer访问,并且页面错误的成本将远远超过额外的内存间接。

答案 1 :(得分:1)

直接回答问题。

C mmap()和Java FileChannel.map()被认为是相当的,并且不会有明显的性能差异。

答案 2 :(得分:1)

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