最新のAndroidアップデート(SDK 21))では、2つの新しい変数が_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ポインターに関する情報を見つけました here :
考え方は、ヒープ上の各オブジェクトには1つの追加の参照フィールドがあるということです。このフィールドは、オブジェクト自体を指すか、オブジェクトが新しい場所にコピーされるとすぐに、その新しい場所を指します。これにより、ミューテータースレッドと同時にオブジェクトを退避できます
特に次の2つのコミットを参照してください。