问题:请讲下在java程序运行时一个对象实例的数据结构是什么样子的

分析:该问题主要考察对java中对象的理解,在程序运行过程中一个对象实例是以什么样的形式存在的

回答要点:

主要从以下几点去考虑,

1、对象实例存储在什么位置

2、程序运行时一个对象实例的数据结构是什么样子的

都知道在java中万事万物都是对象,例如,

public class User{

private String name;
private int age;
private String address;
//年龄加1
public int incrAge(){ return ++age; }
//更新住址,并返回老住址
public String modifyAddress(String newAddress){ this.address=newAddress;
return this.address;
} }

上面是一个User类,有三个属性和两个方法,那么在执行了下面的代码,

User user=new User();

之后,在内存中会发生什么变化。

user肯定要在栈中分配内存,因为它仅仅是一个引用,在java的hotspot虚拟机中一个引用栈4个字节;

user指向的User对象在堆中分配了内存,会形成一个User的实例,这个实例长什么样子,

包含对象头、实例数据、填充区三部分;

对象头

对象头分为两部分,mark word和klass。

mark word中包含了hashcode、GC分代年龄(默认为15)、锁状态标识位、保存持有偏向锁的线程ID、偏向时间戳等。mark word中保存的信息和synchronized有很大的关系,

klass中保存了指向方法区中该类的元信息,表明该实例是哪个类的对象。

实例数据

在实例数据中存储的是该对象中的属性,以上面的User对象为例,存储的是name、age、address三个属性。由于java中的数据类型有基本类型和引用类型,在实例对象中的属性如果是基本类型那么存储的便是其值,如果属性是引用类型那么存储的是一个地址。如果该类显示的指定了父类或者接口,那么根据可见性还会有父类或接口的属性信息。

这里有个疑问在类中有属性和方法,属性存在于实例中也就是在内存中的堆中,那么类中的方法那?方法存储在方法区,在方法区中会有该类的方法信息。

填充区

填充区可有可无。在hotspot虚拟机中要求给对象实例分配内存时,内存的起始地址必须是8的整数倍,也就是对象所占用的内存大小必须是8的整数倍,在对象头的大小肯定是8的整数倍,实例数据有可能不是8的整数倍,这时候填充区便会进行补充直到8的整数倍为止。

有不当之处,欢迎指正,谢谢

java面试一日一题:java中一个对象实例的结构是什么样子的的更多相关文章

  1. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  2. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  3. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  4. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  5. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  6. java面试一日一题:java线程池

    问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...

  7. java面试一日一题:如何判断一个对象是否为垃圾对象

    问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...

  8. java面试一日一题:再谈垃圾回收器中的串行、并行、并发

    问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...

  9. java面试一日一题:mysql中的自增主键

    问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...

随机推荐

  1. Linux基础之Shell与变量

    一.提出问题 在平时的工作中,我们经常会碰到设置环境的问题,例如将应用的执行路径添加到PATH中,方便程序的执行:在Linux中更多的时候是跟shell打交道,很多通过shell启动的应用或者服务都需 ...

  2. [Fundamental of Power Electronics]-PART II-8. 变换器传递函数-8.4 变换器传递函数的图形化构建

    8.4 变换器传递函数的图形化构建 第7章推导出的buck变换器小信号等效电路模型在图8.55中再次给出.让我们用上一节的图解方法来构造该变换器的传递函数和端阻抗. Fig. 8.55 Small-s ...

  3. java面试-CAS底层原理

    一.CAS是什么? 比较并交换,它是一条CPU并发原语. CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什 ...

  4. 动态的创建Class对象方法及调用方式性能分析

    有了Class对象,能做什么? 创建类的对象:调用Class对象的newInstance()方法 类必须有一个无参数的构造器. 类的构造器的访问权限需要足够. 思考?没有无参的构造器就不能创建对象吗? ...

  5. 会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准

    阿里云视频云的标准与实现团队与香港城市大学联合开发了基于 AI 生成的人脸视频压缩体系,相比于 VVC 标准,两者质量相当时可以取得 40%-65% 的码率节省,旨在用最前沿的技术,普惠视频通话.视频 ...

  6. 如何把 Caffeine Cache 用得如丝般顺滑?

    一.关于 Caffeine Cache 在推荐服务中,虽然允许少量请求因计算超时等原因返回默认列表.但从运营指标来说,越高的"完算率"意味着越完整的算法效果呈现,也意味着越高的商业 ...

  7. G - G ZOJ - 2723 (素数打表+set)

    Prime Number Definition An integer greater than one is called a prime number if its only positive di ...

  8. 07- 移动端app弱网测试与fiddle弱网测试

    从下面几个点了解弱网测试: 什么样的网络属于弱网. 低于2g速率的时候都属于弱网,也可以将3g划分为弱网,一般WiFi不纳入弱网范畴. 为什么要进行弱网测试 ①按照移动特定,各种网络连接协议不同,导致 ...

  9. 软件篇-04-OMPL和FCL用于SLAM轨迹规划

    使用OMPL内置的infoRRTstar算法模块和FCL碰撞检测库实现当前点和目标点的轨迹规划, 参考文章:https://www.cnblogs.com/shhu1993/p/7062099.htm ...

  10. 【vue环境】vue : 无法加载文件 C:\Users\1111111\AppData\Roaming\npm\vue.ps1,因为在此系统禁止运行脚本

    在用脚手架搭建vue项目时,提示:无法加载文件 C:\Users\1111111\AppData\Roaming\npm\vue.ps1,因为在此系统禁止运行脚本 这是你笔记本禁止运行脚本,解决办法 ...