你能给我一些有关对象头中确切存储的信息吗?我知道,这可能取决于JVM,但也许至少对于HotSpot?我正在寻找专门针对第一行的确切描述。
我已经阅读了一些信息,这些信息无法用我找到的信息进行正面验证。也许你有指向全部内容的OpenJDK Wiki的链接?
对象头由一个标记词和一个klass指针组成。
所述标记字具有(字大小4 byte
在32位体系结构中,8 byte
在64位体系结构)和
在克拉斯指针对字大小32 bit
的架构。在64 bit
体系结构上,klass指针要么具有字长,但是4 byte
如果可以在这些堆中编码堆地址,也可以具有字长4 bytes
。
此优化称为“压缩的oops”,你也可以使用option进行控制UseCompressedOops。
你还可以找到关于此的Wiki条目1。
该标志词实际上是使用了很多东西。
Biased Locking 2,HotSpot
可以通过它实现有效的锁定。GC to set forward pointers
和中使用to store the age of the objects
。对象的身份哈希码可以存储在标记(“ System.identityHashCode/” Object.hashCode)
内。markOop.hpp
的源代码中有一条注释,该注释根据架构描述了布局:// 32 bits:
// --------
// hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:23 epoch:2 age:4 biased_lock:1 lock:2 (biased object)
// size:32 ------------------------------------------>| (CMS free block)
// PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object)
//
// 64 bits:
// --------
// unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:54 epoch:2 unused:1 age:4 biased_lock:1 lock:2 (biased object)
// PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object)
// size:64 ----------------------------------------------------->| (CMS free block)
//
// unused:25 hash:31 -->| cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && normal object)
// JavaThread*:54 epoch:2 cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && biased object)
// narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object)
// unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)
你能给我一些关于对象头中到底存储了什么的信息吗?我知道,它可能依赖于JVM,但至少对HotSpot来说是这样的吗?我正在寻找第一行的确切描述。 我读过几条信息,但我无法用我找到的信息来证实。也许你有一个OpenJDK维基的链接,说明了一切?
据我所知,基本类型是Scalar,数组是聚合的,但用户定义的类型呢?根据什么标准,我可以将它们分为两类?
问题内容: 每当我学习垃圾收集器时,都会听到术语“对象图”。到底是什么意思? 问题答案: 对象具有对其他对象的引用,这些对象又可以具有对更多对象(包括起始对象)的引用。这将创建对象图,在可及性分析中很有用。例如,如果起始对象是可到达的(例如,它在线程的本地堆栈中),则图形中的所有对象都是可到达的,并且确切的垃圾收集器无法收集任何这些对象。同样,如果我们创建所有可到达对象的列表,则从一组活动对象(根
问题内容: “对象序列化”是什么意思?你能用一些例子解释一下吗? 问题答案: 序列化是将对象转换为一系列字节,以便可以将对象轻松保存到持久性存储或跨通信链接进行流传输。然后可以将字节流反序列化-转换为原始对象的副本。
我正在尝试对函数返回的值发出警报,并且在警报中得到以下信息: 下面是JavaScript代码: 是我试图检查的函数。
问题内容: 运行python脚本时出现此错误: 我很确定’str’是字符串,但是我不知道’NoneType’对象是什么。我的脚本在第二行开始,我知道第一个行之有效,因为该行的命令符合我的期望。起初我以为可能是因为我在send_command中使用了变量和用户输入。 “ CAPS”中的所有内容都是变量,“小写”中的所有内容都是从“ parser.add_option”选项输入的。 我正在使用pexp