JVM中的java 对象【创建过程(6步)&以及对象内存布局&对象大小&对象头&对象定位&对象分配过程】

对象创建过程(6步) 

1.类装载   装载class文件形成Class对象

2.类链接    检验  是否符合jvm规范、准备 为静态属性开辟空间并赋默认值、解析 将符号变量换为真正得地址

3.类初始化  静态赋初始值,执行静态代码块

----------至此Class对象创建完毕----------------

4.是申请对象内存成员属性赋默认值

5.调用构造方法 成员属性赋初始值,执行构造中的代码

6.变量指向该处内存

 

前三部如果执行过,再创建就无需重复执行了

 

对象内存布局

 

对象大小

## 对象大小(64位机 寻址2的64,所以地址指针不压缩的话需要8个字节,默认是压缩的4个字节,但是一旦寻址超过2的32位,压缩自动失效)

### 观察虚拟机配置

java -XX:+PrintCommandLineFlags -version

### 普通对象

1. 对象头:markword  8
2. ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节
3. 实例数据
   1. 引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节 
                                 Oops: Ordinary Object Pointers
4. Padding对齐,8的倍数

### 数组对象

1. 对象头:markword 8
2. ClassPointer指针同上
3. 数组长度:4字节
4. 数组数据:数组长度*单个属性或属性引用(同样受制于UseCompressedOops)的长度
5. 对齐 8的倍数

对象头 markword详解:

由图中可知当对象计算了identityHashCode时偏向锁的偏向线程id被占用,所以该对象无法进入偏向锁状态

 

对象定位:

hotspot使用的是直接指针  寻找快

有些其他jvm句柄池 GC快

对象分配过程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值