当前位置: 首页 > 面试题库 >

什么是Java对象标头

晋奕
2023-03-14
问题内容

你能给我一些有关对象头中确切存储的信息吗?我知道,这可能取决于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。

该标志词实际上是使用了很多东西。

  1. 一是Biased Locking 2,HotSpot可以通过它实现有效的锁定。
  2. 它还在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