JVM-对象创建,在内存中存储布局,对象头包含的东西

1、对象的创建过程

class字节码加载过程
在这里插入图片描述
new对象过程
创建对象然后需要申请内存,成员变量在赋默认值,然后调用构造方法在字节码层面,调用构造方法时候,把成员变量设为初始值,接下来调用构造方法语句super调用父类。
观察虚拟机的配置:java -XX:+PrintCommandLineFlags -version
在这里插入图片描述

2、对象布局

作为对象的内存布局来讲分为两种,第一种叫普通对象,第二种叫数组对象。
普通对象
1:第一是对象头,在hotport里面称为markword 长度是8个字节
2:第二个是ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节。通过这个能找到xx.class这个类。
3:第三个是实例数据
引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节
Oops Ordinary Object Pointers
4:Padding对齐,这个对齐是8的倍数
数组对象

  1. 对象头:markword 8
  2. ClassPointer指针同上
  3. 数组长度:4字节
  4. 数组数据
  5. 对齐 8的倍数
    对象大小
    头8个字节+ClassPointer4个字节+int是4个字节+String是引用应该占8但是UseCompressedOops参数开启了是压缩的是4个字节+int+byte是1个字节+byte+object+byte+加上对齐=32个字节。
    在这里插入图片描述
    Hotspot开启内存压缩的规则(64位机)
  6. 4G以下,直接砍掉高32位
  7. 4G - 32G,默认开启内存压缩 ClassPointers Oops
  8. 32G,压缩无效,使用64位
    内存并不是越大越好

3、对象头具体包括什么?

GC代数,锁标志位,hashcode等。
被重写过的hashcode方法计算出来的不会再这里记录;二进制1111表示15,所以GC代数最大15
在这里插入图片描述
第一锁定信息两位代表对象有没有被锁定,
第二个 GC的标记他被回头多少次了分代年龄;
synchronized升级过程中有一个偏向锁,他有一个升级的过程,就是说我这里被某一个线程占住了,它只偏向于这个线程,这个线程下次再来不需要加锁,所以他有一个偏向锁,所以严格来讲他头上有3位来代表锁,没有锁得状态时候呢注意这个对象hashcode平时的情况并不是被调用出来的,只要调用到这个时候才会被记录在这里,这个hashcode被分为两种情况,第一种情况hashcode这个方法被重写
了,第二个是没有被重写过,他是怎么计算呢?他是根据对象后面内存具体情况来算一个值25位。
总而言之,不同的状态前面这个markword每一位表示的是不同的内容,这点比较复杂。这时候有一个
小问题,为什么GC年龄默认为15? 指的是当我们使用PS这个垃圾回收器的时候它默认的从年轻代升到老年代的年龄咱么讲过对吧,为什么,就因为脑袋上只有4来代表它。

4、对象定位

对象定位也有两种:1、句柄池,2、直接指针
这两种说法在深入了解Java虚拟机那本书上也讲了,其实概念就是当我们new出来一个对象T t = new
T();这个小t是怎么找到这个对象的,有两种方式第一种是通过句柄池,通过间接指针,它只第一步把小t指向两个指针,这两个指针其中一个指向对象,另外一个指向t.class,这个就是中间隔了一下。
第二种直接指向对象然后在指向t.class,他俩没有优劣之分,有的虚拟机实现用第一种有的用第二种,Hotspot用的是第二种,第二种效率比较高直接找到对象,第一种他要找一个指针再找下一个,但是第一种GC的时候效率比较高。

5、对象怎么分配

首先new一个对象的时候先往栈上分配,栈上如果能分配下就分配在栈上,然后栈一弹出对象就没了,如果栈上分配不下 ,特别大直接分配到堆内存,老年代。如果不大,首先会进行线程本地分配,线程本地分配能分配下就分配,分配不下找伊甸区然后进行GC的过程,GC过程年龄到了就直接到老年代了,如果年龄不到的话GC来GC去一直到年龄到了为止。所谓的对象过程指的是这个过程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值