1

ソートされたcsvファイルである50GBのファイルがあります。

CまたはJavaを使用してメモリマップアクセスを使用してこのファイルのルックアップを実行していた場合、理論的には違いがありますか?

ファイル アクセスがオペレーティング システム レベルにプッシュ ダウンされるため、大きな違いはないと思います。

4

3 に答える 3

2

理論的には、Java のオブジェクト指向メソッド呼び出しによる追加の間接化が必要なため、またおそらく Java/JNI 境界を越える必要があるため、Java は非常に遅くなります。

実際には、Hotspot コンパイラはByteBuffer への直接アクセスを最適化し、ページ フォールトのコストは余分なメモリの間接化をはるかに上回ります。

于 2013-03-25T15:19:40.163 に答える
1

質問に対して直接的な答えを与える。

Cmmap()と JavaFileChannel.map()はほぼ同等であると見なされており、パフォーマンスに大きな違いはありません。

于 2013-03-25T16:06:47.610 に答える
1

Java は一度に 2 GB しかマップできません。これは、ByteBuffer が長さ、サイズなどに 32 ビット整数を使用するためです。したがって、50 GB ファイルには 25 mmaps が必要になります。Cは単一のmmapを作成できますが、1990年代のコンピューターには移植できません(気にする場合)

于 2013-05-21T21:09:12.390 に答える