Javaオブジェクトと配列のメモリの場所

arrays hashtable java memory paging
Javaオブジェクトと配列のメモリの場所

キーと値のタイプがオブジェクトである、Javaで配列を使用したハッシュテーブルを作成しています。他の保証はありません。

私にとってコード的に最も簡単な方法は、それらを保持するオブジェクトを作成することです。

public class Pair {
    public Object key;
    public Object value;
}

そして、配列を作成します

public Pair [] storage = new Pair [8];

しかし、jvmはメモリ内でそれをどのように扱いますか? つまり、配列は実際に次のようになります。

  • 他の場所にあるPair()オブジェクトへのポインタの配列、または

  • 実際のデータが含まれていますか?

edit

オブジェクトは後で新しいPair()としてインスタンス化されるため、ヒープにランダムに配置されます。 それらがヒープ内で連続していることを保証する良い方法はありますか? それを機能させるには、sun.misc.unsafeでいくつかのトリックを行う必要がありますか?

連続したアイテムがメモリの同じページにあることを確認したい場合、私の動機を説明しますが、Javaでこれを行う方法はありますか?

  1  2


ベストアンサー

配列は、ヒープ上にある(ただし、配列自体とは別の)Pairオブジェクトへのポインターを含む、ヒープ上のオブジェクトになります。

6


いいえ、ストレージアレイには、ヒープ上のどこかに存在する実際のペアオブジェクトへのポインタのみが含まれます。 それでも、8つのPairオブジェクトをインスタンス化し、配列の各要素がこれらのオブジェクトを指すようにしてください。 記述したコードの後に​​次のようなものが必要です。

for(int i=0;i

その場合のみ、ペアオブジェクトが作成され、ストレージアレイによって正しく参照されます。

1


タイトルとURLをコピーしました