2

Java の arrayList は、実際のオブジェクト データではなく、オブジェクトへの参照を「保持」します。

Java で、参照の代わりにオブジェクト データを直接格納できる arrayList を実装できるかどうか疑問に思っていました。この実装にJava Unsafe Classを使用できますか? はいの場合、既存の Java arrayList と比較して、このリストのパフォーマンスはどうなりますか?

4

1 に答える 1

3

簡単に言えば、いいえ。

Java は、オブジェクトの参照のみを処理します。あなたが説明しているのは、メモリの割り当て/使用に関する低レベルの制御に依存しており、「n」個のエントリにメモリのブロックを割り当てることができます。Java は単純にそのようには機能しません。メモリを制御することはできず、JVM はメモリ内でオブジェクトを自由に移動できます。参照のみを扱います

また、参照を含むオブジェクトはさらに別のメモリ ブロックを参照するため、オブジェクトが 1 つの連続したメモリ ブロックに含まれるという概念は実際には存在しないことに注意してください。

メモリにバックアップされたバイト配列が本当に必要な場合は、DirectByteBufferが役立つ場合があります。java.nioクラスを使用して構築されたクラスsun.misc.Unsafeです。おそらく、オブジェクトをシリアル化/逆シリアル化することができます (インデックスを適切に決定するためにサイズを慎重に計算します)。しかし、シリアライゼーションのコストは、他の節約を圧倒するだろうと私は思う.

于 2013-08-12T22:21:16.420 に答える