java 对象头信息 (一)

本文主要探讨了Java对象头在不同状态下的表现形式,包括普通对象和数组对象的区别。对象头由Mark Word、class pointer和array length三部分组成。Mark Word存储运行时数据,如hashcode、对象年龄和锁状态,其位布局根据锁状态变化。class pointer指向类元数据,确认对象所属类。对于数组,还有array length字段存储数组长度。文章还提到了64位JVM的指针压缩选项以节省内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java头的信息分析

首先为什么我要去研究java的对象头呢?

这里截取一张hotspot的源码当中的注释
在这里插入图片描述
意思是java的对象头在对象的不同状态下会有不同的表现形式,主要有三种状态,无锁状态、加锁状态、gc标记状 态。那么我可以理解java当中的取锁其实可以理解是给对象上锁,也就是改变对象头的状态,如果上锁成功则进入同步代 码块。但是java当中的锁有分为很多种,从上图可以看出大体分为偏向锁、轻量锁、重量锁三种锁状态。这三种锁的效率 完全不同、关于效率的分析会在下文分析,我们只有合理的设计代码,才能合理的利用锁、那么这三种锁的原理是什么? 所以我们需要先研究这个对象头

由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能,这些标记字段组成了对象头。

1.对象头形式

JVM中对象头的方式有以下两种(以32位JVM为例):

1.1.普通对象
Object Header (64 bits)
Mark Word (32 bits) | Klass Word (32 bits)
1.2.数组对象
Object Header (96 bits)
### Java面向对象编程入门教程与练习题 #### 创建简单的Java应用程序来复习面向对象概念 为了帮助理解和实践Java中的面向对象特性,下面提供了个基于教师类`Jiaos`的应用程序实例。此例子展示了如何定义个具有属性和行为的对象,并通过构造函数初始化这些属性。 ```java public class Jiaos { private String name; private String subject; private int age; // 构造器用于初始化新创建的对象成员变量 public Jiaos(String name, String subject, int age) { this.name = name; this.subject = subject; this.age = age; } // 定义方法information()打印老师的信息到控制台 public void information(String location){ System.out.println("姓名:" + name); System.out.println("科目:" + subject); System.out.println("年龄:" + age); System.out.println("上课地点:" + location); } } ``` 接着,在主类中可以这样调用: ```java public class JiaosTest { public static void main(String[] args) { // 使用构造器创建两个不同老师的对象并设置其初始状态 Jiaos js = new Jiaos("张天宝", "物理", 10); js.information("阶梯教室"); System.out.println("==============================="); Jiaos js2 = new Jiaos("刘钰", "数学", 25); js2.information("中心礼堂"); } } ``` 这段代码实现了基本的面向对象原则——封装[^3]。它隐藏了内部数据(`private`)并通过公共接口访问它们的方法。这不仅提高了安全性还增强了模块化程度使得维护更加容易。 此外,还可以进步扩展此类以展示其他OOP特性比如继承或多态性。例如,可以从`Jiaos`派生出更具体的子类如`Professor`或`Assistant`,从而实现特定类型的教职工的行为差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值