オブジェクトのアドレスは、ライフサイクルの間一定であるか、または変更することができますか?私はちょうどオブジェクトのアドレスが決して変化しないと思った。それはJVMに依存していますか?私は明確な仕様を見つけていない。オブジェクトのライフサイクル中にアドレスが固定されていますか?
答えて
java内のオブジェクトのアドレスは固定されていません。むしろ、それは変化し得る(条件に従う)。
通常はオブジェクトがエデンスペースに割り当てられているためです。その後、生存者空間に移動し、次にガベージコレクションのサイクルを経ても旧世代の空間に移動します。それは変化します。しかしオブジェクトがエデンスペースに割り当てられ、同じスペースにとどまってガベージコレクトされても、アドレスは変更されません。同様に、オブジェクトが大きすぎてeden空間に割り当てられない場合、JVMはオブジェクトを古い世代に割り当て、割り当てられた場所にとどまることによってガーベージ・コレクションが行われると、アドレスも変更されません。
1つのオブジェクトが世代にとどまっていても、同じ世代にとどまってガベージコレクションされている場合は、ガベージコレクション中にガベージコレクタによって移動された可能性があるため、 、例えばエデンスペースから生存者、生存者から生存者、さらにはコンパクト化の場合には旧世代にまで及ぶ。
上記の条件から、アドレスの移動はJVMに依存することが明らかです。
希望します。
EDIT
以下の質問に答える:私は新しいオブジェクトを作成し、それを使用して生成されるのhashCode(に基づいて を格納しているマップ、それを格納する場合
をオブジェクトごとのメモリ )。今度はオブジェクトのアドレスが変更され(結果として が別のhashCodeになります)、回答ごとにコードは決して のオブジェクトをマップから取得できませんか?
hashCodes
は、JVMによってオブジェクトヘッダーに保存されます。それは一定です。 object
を作成している間は、デフォルトで1
に割り当てられていますが、初めてオブジェクトを使用すると計算され、ヘッダーに格納されます。 Object
の人生を通して決して変化しません。
一般的ではありません。多くのJVMガベージコレクタはオブジェクトを移動させ、オブジェクトの場所を保証しません。
いくつかのGC(平らなマーク&掃引など)がありません。この機能が必要な場合は、これらをサポートする特殊なJVM(カスタムビルドJikes RVM
など)を使用できます。
各オブジェクトには(少なくとも私が見たJVMでは)一意のID(ほとんど)が含まれていることがあり、部分的にhashcode
の基本的な実装をサポートすることに注意してください。
- 1. 固定サイズの配列が固定されていません
- 2. x位置が固定されていても固定されていますか?
- 3. 二重の長さが17に固定されています
- 4. -webkit-perspectiveを持つ親の中で位置が固定されています
- 5. CSSの位置は左に固定されていますが、上には固定されません
- 6. Android:アドレス(GeoCodeから)には固定フォーマットがありますか?
- 7. CSSの背景が固定されていますか?
- 8. jqgrid列の幅が固定されていますか?
- 9. 固定位置が固定されていない
- 10. モーダルにスクロールバーや高さが固定されていない長いモーダルの中に固定ヘッダーを置くことはできますか?
- 11. なぜsingleton_classオブジェクトはRuby 2.4では固定されていますが、2.3では固定されていませんか?
- 12. 左に固定されたブートストラップナビバーは固定されていません。
- 13. Json配列のサイズが10に固定されています
- 14. Uisegmentedbarがuitableviewの上に固定されています
- 15. リクエストのライフサイクル中に、web.config <location path = '/ Path'>タグが実行されますか?
- 16. ポジションが固定されていない
- 17. テーブルの最後の列が固定されたまま固定されています
- 18. スパン幅が固定されていますか?
- 19. ライフサイクルのライフサイクルの手法。アプリはいつスクリーンにレンダリングされますか?
- 20. UITableViewCell画像が上部に固定されています
- 21. w3css - ドロップダウンメニューが上部に固定されています(w3-top)
- 22. C# - イベントハンドラがメモリに固定されています
- 23. ボタンがフレックスボックスカラムの底に固定されていません
- 24. 固定されたnavbarとアンカーが固定されているブートストラップ
- 25. 定数はC#で固定されていますか?
- 26. ポジション:アンカーに固定されていますか?
- 27. 位置:タブレットに固定されていますか?
- 28. ポジション:固定されていません!
- 29. ブートストラップカルーセルの上に固定されたdivが隠されています
- 30. CSS - 子が固定されていると親が消えます(高さが設定されていても)
そのJVMの内部に、ローカル変数でJVMストアの参照アドレス、JVMのガベージコレクタは、オブジェクト参照の作成後に役割を果たしているため、オブジェクトの使用であり、目に見えない または –