私が正しく理解していれば、.NETではObject.GetHashCode()
のデフォルトの実装はオブジェクトのメモリアドレスに基づいて値を返します(少なくとも参照型の場合)。しかし、ガベージコレクタは自由にオブジェクトをメモリ内で動かすことができます。おそらく、GCがオブジェクトを動かすだけで、ハッシュコードが変わるわけではないので、この相互作用のための特別な処理がありますか、または私の仮定が間違っていますか?GCがオブジェクトを移動するときにObject.GetHashCodeはどのように機能しますか?
22
A
答えて
21
アドレスに基づいて値を返しません。オブジェクトのシンクブロックに基づいて値を返します。
同期ブロックは、object.GetHashCode
が呼び出されたとき(オーバーライドされていない場合)に割り当てられます。またはオブジェクトのロックに競合があります。 (Wait/Pulse/PulseAllを呼び出しても割り当てられますが、私は見ていません)
シンクブロックは、メモリ内のオブジェクトのメインデータの場所に依存しません。基本的に(私が理解しているように)シンクブロックのための1つの大きなテーブルがあります。これは、何らかの方法で効率的に保たれています(システムのハッシュコードが必要な場所またはロックされているオブジェクトのみ)。
関連する問題
- 1. jquery指向オブジェクトはどのように機能しますか?
- 2. リンクが機能するようにヘッダーを前面に移動
- 3. 「推移的リゾルバ」はSBTとどのように機能しますか?
- 4. MySQL自動インクリメントはどのように機能しますか?
- 5. GCとIDisposeはどのようにC#で動作しますか?
- 6. モバイルGmailのページ遷移はどのように機能しますか?
- 7. Railsでの移行はどのように機能しますか?
- 8. AddImplicitRequiredAttributeForValueTypesが実際にどのように機能し、どのように機能していますか?ここ
- 9. printfとscanfはどのように機能しますか?
- 10. AppMakrとモバイルRoadieはどのように機能しますか?
- 11. TableLayoutはTableRowとどのように機能しますか?
- 12. コンストラクターシグネチャーとタイプスクリプトインターフェースはどのように機能しますか?
- 13. デリゲートとコールバックはどのように機能しますか?
- 14. reference_wrapperとstd :: refはどのように機能しますか?
- 15. Xamarin iOSとAndroidはどのように機能しますか?
- 16. pthread_key_tとpthread_key_createメソッドはどのように機能しますか?
- 17. インデックスではどのようにインデックスが機能しますか?
- 18. Readonly参照型のポインタは、.NETでGCを圧縮して移動した後に移動できますか?
- 19. ボードピースはどのように移動できますか?
- 20. どのようにミューテックスが実際に機能しますか?
- 21. VIMの機能はどのようにテストできますか?
- 22. 先頭に移動する機能がkineticJsで機能していません
- 23. Boehm GCはCプログラムでどのように動作しますか?
- 24. JavaScript []は本当にどのように機能しますか?
- 25. ブートストラップグリッドは実際にどのように機能しますか?
- 26. WPAは実際にどのように機能しますか?
- 27. UpdatePanelは実際にどのように機能しますか?
- 28. どのようにオブジェクトを動的にキャストできますか?
- 29. dropbox.comの複数のファイルアップロード機能はどのように機能しますか?
- 30. JQueryのdatepickerのポップアップ機能はどのように機能しますか?