問題タブ [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 投票する
0 に答える
2504 参照

java - MappedByteBufferを使用して巨大なファイル〜14GBのファイルを読み取る

I/O 集中型のプロデューサーとコンシューマーの問題を解決しようとしています。プロデューサ定数はデータをファイルに追加し、コンシューマはこの増大するファイルから読み取ります。通常、ファイル サイズは GB (約 10GB) 単位です。

最初に、BufferedOutputStream と BufferedInputStream を試して、データをファイルに読み書きしました。午前 9 時 30 分に発生するデータのバースト中に、30 ~ 40% (I/O のシステム コールである必要があります) のようにシステム CPU の使用率が高すぎます。

これを高速化するためにメモリマップファイルを調べます。

1) ファイル readThisFile.dat size() が INTEGER.MAX の長さを超えているため、inChannel.map() は例外をスローします。

2) 非常に大きなファイルのメモリ マップド ファイルを使用して、消費者が常にデータを読み取る方法。消費者は毎回 100MB をロードして、さらに多くのデータを探し続けることができますか?

3)Javaでメモリマップファイル以外の何かを試すようなより速い解決策はありますか?

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

java - マルチスレッドの ByteBuffers はシーケンシャルより遅いですか?

処理する必要がある巨大なバイト配列があります。理論的には、作業を均等にスライスして別のスレッドに割り当て、マルチコア マシンでのパフォーマンスを向上させることができるはずです。

ByteBuffer各スレッドに を割り当て、それぞれデータの一部を処理しました。8 つの論理プロセッサを使用しているにもかかわらず、最終的なパフォーマンスはシングル スレッドよりも遅くなります。また、非常に矛盾しています。場合によっては、同じ入力の処理が 2 倍以上遅くなることがあります。何故ですか?データは最初にメモリにロードされるため、それ以上のIO操作は実行されません。

MappedByteBufferより高速であるため、次を使用して ByteBuffers を割り当てますByteBuffer.wrap()

私は以下を使用して並行処理を行いますExecutors

並行タスクperformTask()は、独自のByteBufferインスタンスを使用して、バッファーからメモリを読み取り、計算を実行します。それらは互いに同期したり、書き込みをしたり、影響を与えたりしません。何がうまくいかないのか、またはこれは並列化の良いケースではないのでしょうか?

同じ問題が存在しByteBuffer.wrap()ますMappedByteBuffer

0 投票する
3 に答える
1331 参照

crash - Java 8 アプリケーションがすべてのシステム RAM を使用し、SIGBUS でクラッシュします。何が起きてる?

ネットワーク経由でメッセージを取り込み、Java NIO MappedByteBuffer を使用して複数のメモリ マップ ファイルに書き込む Java 8 アプリケーションがあります。これらのファイルからメッセージを順番に同時に読み取り、MappedByteBuffer を使用して読み取りファイルを再度削除するリーダーがあります。約 246 GB のデータを読み書きし、アプリケーションが次のようにクラッシュするまで、すべてがスムーズです。

hs_err_pid44460.log空で、コア ダンプcore.44460のサイズは約 246 GB で、書き込もうとしているメッセージでいっぱいです。

最大ヒープ サイズ 32 GB で実行しています。JConsole によると、不足してFree Physical Memoryクラッシュします。 JConsole スクリーン キャプチャ

RAM が不足しているのはなぜですか? ファイル ハンドルを閉じるのを忘れているのですか / MMapped ファイルを正しく閉じていませんか?

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

java - Android の高性能ファイル IO

ECG モニターと通信するアプリを作成しています。データは毎秒 250 サンプルの速度で読み取られます。ECG モニターからの各パッケージには 80 バイトが含まれ、これは 1 秒あたり 40 回受信されます。

RandomAccessFile(outputFile, "rws")RandomAccessFile を使用してみましたが、同期モードと非同期 モードの両方でパッケージが失われました RandomAccessFile(outputFile, "rw")

最近の実験では、MappedByteBuffer を使用してみました。これは非常にパフォーマンスが高いはずですが、バッファーを作成するときにmap(FileChannel.MapMode.READ_WRITE, 0, 10485760)、10MB バッファーのサイズを指定する必要があります。ただし、これにより、ファイルのサイズは常に 10MB になります。ファイルサイズが保存されている実際のデータ量のみである MappedByteBuffer を使用することは可能ですか?

または、これを達成する別の方法はありますか?これほど頻繁にファイルに書き込むのはナイーブですか?

余談ですが、これは iOS ではまったく問題ではありませんでした。これは、バッファリングなしで実現できます。

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

cassandra - Cassandra SSTable およびメモリ マップ ファイル

この記事SSTable の観点からの読み取りと書き込み(かなり古い記事です) で、著者は indexdb と sstable ファイルがメモリ マップ ファイルを使用してウォームアップされていると述べています。

各SSTableの行キーはindex.dbという別のファイルに保存され、起動時にCassandraはウォームアップのために「これらのファイルを調べます」。Cassandra はメモリ マップされたファイルを使用するため、起動時にファイルを読み取るときに、それらのファイルへの最初のアクセスがメモリから提供されることが期待されます。

CommitLogSegment では MappedByteBuffer が使用されていますが、SSTable ローダー/リーダーでは使用されていません。また、MappedByteBuffer をファイル チャネルにマッピングするだけでは、ファイルがメモリに読み込まれません。load を明示的に呼び出す必要があると思います。

私の質問は、Cassandra が起動するとき、どのようにウォームアップするのですか? そして、この記事の声明に何か欠けていますか?

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

android - メモリ マッピング ファイルはメモリ管理に干渉しますか?

メモリ マッピングを使用してファイルにアクセスするアプリを作成しました。読み込み速度が飛躍的に向上したので成功です。

予想どおり、に割り当てられたメモリByteBufferは VM ヒープに対してカウントされません。ヒープ ダンプを見ると、アプリが実際よりも大幅に少ないメモリを使用しているように見えます。

私の質問は、この種の割り当てが他のアプリに関連するデバイスのメモリ管理にどのような影響を与えるか (もしあれば) です。 私のアプリは Android エコシステムの「悪い市民」になりますか?