問題タブ [mappedbytebuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
330 参照

java - Java-mappedbytebuffer は直接メモリを占有しますか?

マップされたバイトバッファがJavaで直接メモリを占有するかどうかに興味がありますか? ここで述べたように

ダイレクト バイト バッファは、ファイルの領域をメモリに直接マッピングすることによって作成することもできます。

ファイルをメモリにマップするときは、ダイレクト メモリを使用する必要があります。しかし、JVM パラメータ "-XX:MaxDirectMemorySize=200MB" でプログラムを開始し、1GB のファイルをメモリにマップしようとしましたが、うまくいきました。さらに、最初に 200MB の directByteBuffer を割り当ててから、1GB のファイルをメモリにマップしようとしましたが、それでも機能しました! では、mappedbytebuffer はメモリのどの部分を占めるのでしょうか?

0 投票する
1 に答える
199 参照

java - MappedByteBuffer 使用時の IndexOutOfBoundsException

MappedByteBuffer を使用して、データをファイルに保存/ロードすることを考えています。long 型のフィールド A があり、シリアル化すると文字列のフィールド B が次のようになるとします。B(文字列)

今、私はそれに書いて読みたいと思っています。サンプルコードの一部を次に示します。

mbb.getLong(0)
そのため、後で呼び出してlong を取得できますmbb.get(outputArray,8,outputArray.length)

しかし今、私は場所(2)で失敗しています。助言がありますか?

0 投票する
2 に答える
2084 参照

java - JavaでInteger.MAX_VALUEより大きいファイルをメモリマップする方法はありますか?

FileChannel#mapファイルをマップする (つまり、メモリ マップを開始する) ために使用される は、long長さパラメーターとして受け取ります。

それでも、ドキュメントにFileChannel#mapは次のよう に書かれています。

size - マップされる領域のサイズ。負ではなく、Integer.MAX_VALUE 以下でなければなりません

まず第一に、最大値しか許可しないのに、そもそも long を使用するのはなぜInteger.MAX_VALUEですか? それよりも大きなファイルを一度にマップすることは何とか可能ですか?

たとえば、10GB のファイルをマップしたい場合、次のように書きたいと思います (InvalidArgumentException長すぎるために最終的には になります)。

そのために連続したメモリ マップを作成する必要がありますか。

0 投票する
0 に答える
374 参照

java - メモリ マップト ファイルはマルチプロセス シナリオでどのように機能しますか?

この質問は何日も私を混乱させてきました:

同じマシンで実行される 2 つのプロセス (p_writeと) があるとします。p_read

  • プロセスp_writeは、mmap ファイルを書き込み/更新するためのものです。

  • プロセスp_readは、mmap ファイルを消費する、つまり、mmap ファイルから読み取るためのものです。

ここでの私の仮定は、p_write最初に mmap ファイルにメモリ領域 (オフヒープ) を割り当てる必要があるということです (領域は、Java MappedByteBufferAPI を使用して自動的にファイルにマップされます)。

ここでの私の質問は、p_read が mmap ファイルからどのように読み取るかです。私の仮定では、p_readマップ先の mmap ファイルに別の同じサイズのオフヒープ領域を割り当てる必要もありますが、このシナリオではメモリ量を 2 倍にする必要があるため、これは正しくないようです。

p_readマップ先の mmap ファイルに別のメモリ空間を割り当てる必要がない場合p_read、 によってファイルがマップされた正しいメモリ アドレスをどのように知ることができますp_writeか?

更新 1

または、これをフォローアップの質問と見なすことができます:FileChannel.map()が 2 回呼び出された場合、同じファイルが 2 つの異なるメモリ空間に 2 回マップされますか?

2 つのシナリオがすべて 1 つの同じメモリ空間にマップされている場合は、実際には問題にならないのではないでしょうか?