문제

내가 올바르게 이해하면 .NET에서 기본 구현 Object.GetHashCode() 객체의 메모리 주소를 기준으로 값을 반환합니다 (최소한 참조 유형의 경우). 그러나 쓰레기 수집기는 메모리에서 물체를 자유롭게 움직일 수 있습니다. 아마도 HSH 코드는 GC가 객체를 움직여서 변경되지 않을 것입니다. 따라서이 상호 작용에 대한 특별한 처리가 있습니까? 아니면 내 가정이 잘못 되었습니까?

도움이 되었습니까?

해결책

주소를 기준으로 값을 반환하지 않습니다. 객체의 동기화 블록을 기준으로 값을 반환합니다.

동기화 블록이 처음으로 할당됩니다 object.GetHashCode (재정의되지 않은 경우) 또는 물체의 잠금 장치에 대한 논쟁이 있습니다. (대기/펄스/pulseall도 호출하면 할당 될 수 있습니다.

동기화 블록은 메모리에서 객체의 기본 데이터의 위치와 무관합니다. 기본적으로 (내가 이해하는 것처럼) 동기화 블록에 대한 큰 테이블 하나가 있습니다. 일부 방식으로 효율적으로 유지됩니다. 일부는 하나의 객체 (시스템 해시 코드가 필요한 경우 또는 잠금)로 인해 일부 객체가 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top