Java で列指向のデータ ストレージ エンジンを実装しようとしています。動的に成長する配列に連続したメモリ割り当てを実装する方法が他にあるかどうか知りたいと思いました。
HashMaps は、拡張/サイズ変更時に連続したメモリ ブロックを割り当てることができません。
より大きなサイズの新しい固定配列を作成し、古い固定配列からこの新しい配列に値をコピーすることによっても、連続性を実現する唯一のオプションのように見えますが、これは for ex と比較すると非常に遅いです。現在のサイズが 100 万の列 (固定配列) に既に 100 万のレコードがあり、1000001 の位置に新しい値を挿入する必要がある場合、jvm はサイズ 1000001 の新しい配列を作成し、すべての値を新しい配列にコピーする必要があります。より大きなサイズの配列 (1 つの値を挿入するためだけ) と連続性を維持します。
ArrayList は、上で説明したように内部的に同じように機能します (新しい配列の割り当て + 古い値のコピーなど)。そのため、スレッド セーフのための同期のオーバーヘッドが追加されたベクトルとして。
そのため、初期化中に巨大な固定配列を作成して大量の連続メモリを割り当てる別の方法は、大量の未使用メモリが発生するため、実行可能な解決策ではありません。
より良いオプションが利用可能な場合は助けてください。たとえば。(Javaで達成できる場合)現在の固定配列の最後の要素のアドレスを知り、使用可能な場合は次の連続する利用可能なブロックを何らかの方法でチェックするようなものですか?もしそうなら、それを使用して新しい値を格納し、配列インデックスを更新してこの新しい変更に対応し、O(1) 時間の読み取りアクセスを維持しますか?
ありがとう。