そのため、処理する必要がある整数の大きなリストがあります (70Mb のオーダー)。それらを読み取るプロセスの一環として、それらを一時的に保存する必要があります。それらをいくつかの IntBuffers に分散させるか、いくつかの大きな配列を割り当てることができます。
ただし、メモリ使用量の観点から IntBuffer を配列と比較する方法に関するドキュメントは見つかりませんでした (java が追加するすべてのメタデータを使用)。誰もこれについて何か知っていますか?
そのため、処理する必要がある整数の大きなリストがあります (70Mb のオーダー)。それらを読み取るプロセスの一環として、それらを一時的に保存する必要があります。それらをいくつかの IntBuffers に分散させるか、いくつかの大きな配列を割り当てることができます。
ただし、メモリ使用量の観点から IntBuffer を配列と比較する方法に関するドキュメントは見つかりませんでした (java が追加するすべてのメタデータを使用)。誰もこれについて何か知っていますか?
70MB の int に比べて、IntBuffer が追加するメタデータは何もありません。しかし、プロファイラーはより完全な答えを提供します。
配列が大きい場合、特にメモリ使用量に関してはint[]
、ヒープIntBuffer
またはダイレクトとの間にほとんど違いはありません。IntBuffer
(若干のオーバーヘッドあり)
パフォーマンスに関しては、 が最速で、ネイティブ バイト オーダーを使用int[]
するダイレクトが 2 番目に高速です。IntBuffer
IntBuffer の利点は、オフ ヒープであり、ヒープ サイズやフル GC 時間を増やさずに、70 GB などのはるかに大きなサイズを使用できることです。
int[]
70 MB のアレイの場合、最も単純なソリューションが最適である可能性が高いほど小さいです。(また、最も簡単に記述でき、最も効率的に実行できます)