your programing

java.lang.Object에서 'shadow $ _klass_'및 'shadow $ _monitor_'변수는 무엇입니까?

lovepro 2020. 12. 31. 23:05
반응형

java.lang.Object에서 'shadow $ _klass_'및 'shadow $ _monitor_'변수는 무엇입니까?


최신 Android 업데이트 (SDK 21)에서 두 개의 새로운 변수가 다음에 추가 된 것으로 보입니다 java.lang.Object.

private transient Class<?> shadow$_klass_;
private transient int shadow$_monitor_;

다음 shadow$_monitor_에서 간략하게 사용됩니다 hashCode().

public int hashCode() {
    int lockWord = shadow$_monitor_;
    final int lockWordMask = 0xC0000000;  // Top 2 bits.
    final int lockWordStateHash = 0x80000000;  // Top 2 bits are value 2 (kStateHash).
    if ((lockWord & lockWordMask) == lockWordStateHash) {
        return lockWord & ~lockWordMask;
    }
    return System.identityHashCode(this);
}

그러나 그렇지 않으면 그것들에 대한 언급이 없습니다. ART의 GC와 관련이 있습니까? 아니면 일종의 토착 물건?


그들은 실제로 GC에 연결되어 있습니다. Brooks 포인터를 지원하기 위해 추가 된 것 같습니다. 여기 에서 Brooks 포인터에 대한 정보를 찾았 습니다 .

아이디어는 힙의 각 개체에 하나의 추가 참조 필드가 있다는 것입니다. 이 필드는 개체 자체를 가리 키거나 개체가 새 위치로 복사 되 자마자 새 위치를 가리 킵니다. 이를 통해 뮤 테이터 스레드와 동시에 객체를 비울 수 있습니다.

특히 다음 두 커밋을 참조하십시오.

libcore : a7c69f785f7d1b07b7da22cfb9150c584ee143f4

예술 : 9d04a20bde1b1855cefc64aebc1a44e253b1a13b

참조 URL : https://stackoverflow.com/questions/26933888/what-are-the-shadow-klass-and-shadow-monitor-variables-for-in-java-lang

반응형