美文网首页
实例化对象过程

实例化对象过程

作者: 关玮琳linSir | 来源:发表于2018-04-13 13:24 被阅读22次

实例化对象过程

new关键字执行过程

  1. 进行类加载检查。当遇到一个new指令,首先检查能否在方法区的常量池中能否定位到这个类的符号引用,并且检查类有没有进行加载、解析和初始化

  2. 进行类加载检查。当遇到一个new指令,首先检查能否在方法区的常量池中能否定位到这个类的符号引用,并且检查类有没有进行加载、解析和初始化

  3. 初始化。将分配的内存初始化为0值

  4. 基本设置。进行基本的设置,确定这个对象是哪个类的实例,对象的HASH码,对象的年龄等等

对象内存布局

  1. 对象头(Header)
    对象头包含两个部分的信息,第一部分是对象自身的运行时数据,如哈希码、GC分代年龄、持有的锁等等;第二部分是类型指针,指向它的类元数据的指针,通过这个虚拟机来确定这个对象是哪个类的实例。

  2. 实例数据(Instance Data)
    对象真正存储的数据,就是程序代码中定义的字段内容。

  3. 对齐填充(Padding)
    用于使对象的开头必须是8字节的整数倍,无特殊意义。

对象的访问定位

Object objectRef = new Object();

Object objectRef 这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。而“new Object()”这部分将会反映到Java堆中,形成一块存储Object类型所有实例数据值的结构化内存,根据具体类型以及虚拟机实现的对象内存布局的不同,这块内存的长度是不固定。另外,在java堆中还必须包括能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些数据类型存储在方法区中。

有两种基本的定位方式:

第一:句柄访问(间接)
在Java堆中划分一块内存作为句柄池(即一个句柄列表),reference中存储的就是对象在句柄池中的地址,得到了句柄池的地址就可以知道对象的实例数据和类型数据的位置。

image

第二:直接指针访问(直接)

reference中存储的直接就是对象的实例数据的地址,而实例数据中自己有一个指针存储对象类型数据的地址(方法区中),不需要reference来存储。

image

相关文章

  • 实例化对象过程

    实例化对象过程 new关键字执行过程 进行类加载检查。当遇到一个new指令,首先检查能否在方法区的常量池中能否定位...

  • python 一图看懂各种类方法

    对象:是类实例化后的实体 实例化:创建对象的过程称为实例化,一般用:if __name__ == '__main_...

  • JavaSE知识点6java实例化

    实例化 1概述对象(Object)又叫做实例(Instance),生成一个对象的过程又叫做实例化。*2 构造方法(...

  • 03-this的指向--js

    1.this在构造函数中 指向 实例对象 new 的过程 -- 实例化 被创建出来的对象 -- 实例对象 ...

  • 对象与类

    面向对象程序设计概述 OOP结构化过程化程序设计对象 类 类构造对象的过程称为创建类的实例封装实例域方法对象状态实...

  • 面向对象(五)实例化和实例

    实例化: 通过构造函数创建对象的过程,就称为实例化。 实例: 通过构造函数创建的对象被称为该构造函数的实例。一般在...

  • java——对象实例化过程

    理解Java中对象实例化过程是很重要的,实例化过程主要步骤如下: 第1步:在创建类之前,检查类是否加载(是将硬盘上...

  • 子类对象实例化过程

  • SpringBean 的实例化过程

    一个Bean 的实例化过程 不通过new 对象 Spring 是如何实例化对象的? 创建一个javaBean , ...

  • 创建型模式之单例模式

    创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程,即创建对象的同时隐藏创建逻辑。 1、使用场景 什...

网友评论

      本文标题:实例化对象过程

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