What are the #39;shadow$_klass_#39; and #39;shadow$_monitor_#39; variables for in java.lang.Object?(在java.lang.Object中,#39;影子$_Klass_39;和#39;影子$_monitor_#39;变量是什么?)
问题描述
在最新的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_';变量是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在java.lang.Object中,';影子$_Klass_&39;和';影子$_monitor_';变量是什么?
基础教程推荐
- 在螺旋中写一个字符串 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01