在java.lang.Object中,'影子$_Klass_&39;和'影子$_monitor_'变量是什么?

本教程将介绍在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中,&#39;影子$_Klass_&39;和&#39;影子$_monitor_&#39;变量是什么?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。

0
没有账号?注册  忘记密码?