本文介紹了在java.lang.Object中,';影子$_Klass_&39;和';影子$_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指針的一些信息here:
其思想是堆上的每個對象都有一個額外的引用字段。此字段指向對象本身,或在對象復制到新位置后立即指向該新位置。這將使我們能夠與賦值線程同時疏散對象
請特別查看這兩個提交:
libcore: a7c69f785f7d1b07b7da22cfb9150c584ee143f4
art: 9d04a20bde1b1855cefc64aebc1a44e253b1a13b
這篇關于在java.lang.Object中,';影子$_Klass_&39;和';影子$_monitor_';變量是什么?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,