オブジェクトのアドレスは、ライフサイクルの間一定であるか、または変更することができますか?私はちょうどオブジェクトのアドレスが決して変化しないと思った。それはJVMに依存していますか?私は明確な仕様を見つけていない。オブジェクトのライフサイクル中にアドレスが固定されていますか?
答えて
java内のオブジェクトのアドレスは固定されていません。むしろ、それは変化し得る(条件に従う)。
通常はオブジェクトがエデンスペースに割り当てられているためです。その後、生存者空間に移動し、次にガベージコレクションのサイクルを経ても旧世代の空間に移動します。それは変化します。しかしオブジェクトがエデンスペースに割り当てられ、同じスペースにとどまってガベージコレクトされても、アドレスは変更されません。同様に、オブジェクトが大きすぎてeden空間に割り当てられない場合、JVMはオブジェクトを古い世代に割り当て、割り当てられた場所にとどまることによってガーベージ・コレクションが行われると、アドレスも変更されません。
1つのオブジェクトが世代にとどまっていても、同じ世代にとどまってガベージコレクションされている場合は、ガベージコレクション中にガベージコレクタによって移動された可能性があるため、 、例えばエデンスペースから生存者、生存者から生存者、さらにはコンパクト化の場合には旧世代にまで及ぶ。
上記の条件から、アドレスの移動はJVMに依存することが明らかです。
希望します。
EDIT
以下の質問に答える:私は新しいオブジェクトを作成し、それを使用して生成されるのhashCode(に基づいて を格納しているマップ、それを格納する場合
をオブジェクトごとのメモリ )。今度はオブジェクトのアドレスが変更され(結果として が別のhashCodeになります)、回答ごとにコードは決して のオブジェクトをマップから取得できませんか?
hashCodes
は、JVMによってオブジェクトヘッダーに保存されます。それは一定です。 object
を作成している間は、デフォルトで1
に割り当てられていますが、初めてオブジェクトを使用すると計算され、ヘッダーに格納されます。 Object
の人生を通して決して変化しません。
一般的ではありません。多くのJVMガベージコレクタはオブジェクトを移動させ、オブジェクトの場所を保証しません。
いくつかのGC(平らなマーク&掃引など)がありません。この機能が必要な場合は、これらをサポートする特殊なJVM(カスタムビルドJikes RVM
など)を使用できます。
各オブジェクトには(少なくとも私が見たJVMでは)一意のID(ほとんど)が含まれていることがあり、部分的にhashcode
の基本的な実装をサポートすることに注意してください。
- 1. 固定サイズの配列が固定されていません
- 2. -webkit-perspectiveを持つ親の中で位置が固定されています
- 3. CSSの位置は左に固定されていますが、上には固定されません
- 4. CSSの背景が固定されていますか?
- 5. jqgrid列の幅が固定されていますか?
- 6. Android:アドレス(GeoCodeから)には固定フォーマットがありますか?
- 7. ポジションが固定されていない
- 8. Uisegmentedbarがuitableviewの上に固定されています
- 9. リクエストのライフサイクル中に、web.config <location path = '/ Path'>タグが実行されますか?
- 10. C# - イベントハンドラがメモリに固定されています
- 11. ポジション:固定されていません!
- 12. 定数はC#で固定されていますか?
- 13. 画像が正しく固定されていませんか?
- 14. 位置:タブレットに固定されていますか?
- 15. css3変換の位置が固定されています
- 16. エミュレータで画面の向きが固定されています
- 17. JavaScriptのカウントダウンスクリプトが固定されています
- 18. AsyncImageViewは動的高さで固定されていますか?
- 19. メソッド呼び出し中に作成されたローカルJavaオブジェクトのライフサイクル
- 20. ベクトルの最初の要素のアドレスは固定されていますか?例えば
- 21. UMLでは、オブジェクトの状態マシンがオブジェクトのライフサイクルを定義していますか?
- 22. ウェブページのサイズは固定されていますか?
- 23. ライフサイクル設定でプラグインの実行がカバーされていません
- 24. コール中の余分な引数 'error'は固定されていません
- 25. エラー:アドレスを持つソケットをバインド中にアドレスが既に使用されていますが、 `netstat`によってポート番号が空いています。
- 26. オブジェクト参照がオブジェクトに設定されていません
- 27. オブジェクト参照がオブジェクトのインスタンスに設定されていない(完全に壊れていますか?)vb.netで
- 28. アンドロイドの活動ライフサイクルが登録されていません。
- 29. com.jayway.maven.plugins.android.generation2:プラグインの実行はライフサイクル設定でカバーされていませんか?
- 30. xmlHttpRequestオブジェクトのライフサイクルのどの時点で、シリアル化されたXMLがDOMに解析されますか?
そのJVMの内部に、ローカル変数でJVMストアの参照アドレス、JVMのガベージコレクタは、オブジェクト参照の作成後に役割を果たしているため、オブジェクトの使用であり、目に見えない または –