什么是java.lang.Object中的“shadow $ _klass_”和“shadow $ _monitor_”variables?
在最新的android更新(SDK 21)中,似乎有2个新的variables被添加到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); }
但是否则没有提及他们。 他们在某种程度上与艺术中的GC相关吗? 或某种本地的东西?
他们确实与GC有联系。 他们似乎已被添加为了支持布鲁克斯的指针。 我在这里find了关于Brooks指针的一些信息:
这个想法是,堆上的每个对象都有一个额外的引用字段。 该字段或者指向对象本身,或者一旦对象被复制到新的位置,就指向新的位置。 这将使我们能够与mutator线程同时撤出对象
特别看这两个提交:
libcore:a7c69f785f7d1b07b7da22cfb9150c584ee143f4
艺术:9d04a20bde1b1855cefc64aebc1a44e253b1a13b