美文网首页Java学习笔记
面试官:说说Java对象的组成

面试官:说说Java对象的组成

作者: 8e828cdb8c4f | 来源:发表于2019-04-22 15:42 被阅读1次

在java中对象对于我们来说再熟悉不过了,运用也简单,什么时候想要new一个,所以说啊咱们程序员不缺对象! 那我们真的了解对象吗?它由哪几部分组成呢? 在HotSpot虚拟机中,也就是我们的常用虚拟机。 对象组成分为3个区域:对象头、实例数据、对齐填充。

对象头

对象头分为两个部分:对象自身运行时的数据,类型指针

对象自身运行时的数据,例如:HashCode、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳、GC分代年龄等。这部分数据长度在32位和64位虚拟机(若未开启压缩指针)下分别为32bit和64bit。这部分称为"Mark Word"。

并且Mark Word 被设计为 没有固定的数据结构 用来在很小的空间内可以存储更多的信息,它会根据不同的状态存储不同的数据。例如在32位情况下,存储内容的变化如下

类型指针,也就是指向此对象的类元数据的指针,也就是通过这个指针来知道这个对象是哪个类的实例,但是不是所有的虚拟机实现都是通过这个来查找类的元数据的。

像HotSpot虚拟机,我们都知道平时new了一个对象保存的是这个对象的引用,这个引用存储的是对象实例的地址,而有些虚拟机的实现是这个引用存储的是一个对象的句柄地址,句柄地址又包含了对象实例地址和对象类型地址。

也就是这类虚拟机有一个句柄池,句柄池内部存储了对象的实例数据地址和类数据地址,所以这类虚拟机可以直接通过句柄池中类数据地址去找到这个对象是属于哪个类的实例。

如果对象是个数组,那还需要一块地方来记录数据的长度。

实例数据

实例数据就是对象真正存储的数据区,各种类型的字段内容。

相关文章

  • 面试官:说说Java对象的组成

    在java中对象对于我们来说再熟悉不过了,运用也简单,什么时候想要new一个,所以说啊咱们程序员不缺对象! 那我们...

  • java对象的组成

    在java中对象对于我们来说再熟悉不过了,运用也简单,什么时候想要new一个,所以说啊咱们程序员不缺对象!那我们真...

  • Java锁的原理

    引子 上锁就是改变对象的对象头?什么是对象头?----Java对象的布局----Java对象由什么组成----对象...

  • Java中对象的组成

    网上结论多以32位系统为主。本文基于64位。力求简介,不会写太多废话,但能保证写出来的都是可供验证的客观事实。验证...

  • 对Java对象的深入认识(三)

    1. Java对象 1.1 Java对象的组成 ​ 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3...

  • Java对象头和对象组成参考

    补充1:JVM中new一个Java空对象最少需要3个字长,引用1个字长,对象头2个字长;补充2:JVM中new一个...

  • java对象的创建过程

    面试官:创建java对象有哪几种方式? 小白:new、clone、反射、反序列化。 面试官:那你知道 new 一个...

  • synchronized锁升级详细过程

    前言-对象头结构 java对象头由3部分组成: 1、Mark Word 2、指向类对象(对象的class对象)的指...

  • Android程序员重头学Synchronized

    面试官:能说说 Synchronized 吗?答:Synchronized 是Java的一个关键字,使用于多线程并...

  • JSP

    jsp组成 html + java + jsp标签 jsp中无须创建即可使用的对象(9个) java脚本格式<%....

网友评论

    本文标题:面试官:说说Java对象的组成

    本文链接:https://www.haomeiwen.com/subject/igaygqtx.html