美文网首页
第二节、对象的创建

第二节、对象的创建

作者: 最美下雨天 | 来源:发表于2018-07-04 09:03 被阅读0次
对象的创建过程

这里所说的是普通的对象(不包括数组、Class对象等)

  • 当虚拟机遇到new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过,如果没有,那必须先执行相应的类加载过程。
  • 类加载检查通过后,接下来就是为这个对象分配内存,对象所需内存的大小在类加载完成后便可以确定,就是从java堆内存中划出一块空间给这个对象使用,需要注意在分配内存时的线程安全问题。
  • 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值。
对象的内存布局

对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)

  • 对象头包括两部分数据:第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等;第二部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
  • 实例数据部分存储的是对象真正的有效信息,也是在程序代码中所定义的各种类型的字段内容(所以类的成员变量是在这部分内存中存储的,方法中的局部变量是在栈中存储的,而常量、静态变量是在方法区中存储的),无论是从父类继承下来的还是在子类中定义的,都需要记录下来。

相关文章

  • 第二节、对象的创建

    对象的创建过程 这里所说的是普通的对象(不包括数组、Class对象等) 当虚拟机遇到new指令时,首先检查这个指令...

  • javascript面向对象解析(一)

    创建对象的方式 json对象方式创建对象 Object方式 声明构造函数方式,创建对象 -- 这种创建对象的方式用...

  • JS笔记-006-JS对象-数字-字符串-日期-数组-逻辑

    JS对象 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象。 创建新对象有...

  • 创建对象只是开辟个堆内存那么简单吗?

    java对象 对象的创建 java的对象是在运行时创建的,创建对象的的触发条件有以下几种: 用new语句创建对象,...

  • 对象的创建

    对象的创建 虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检...

  • 对象的创建

    一、创建过程 二、重点说明 1.在Java堆中为对象分配内存空间 分配方法 有两种主流方法:指针碰撞;空闲列表。 ...

  • 对象的创建

    创建对象1.工厂模式 2.构造函数模式 3.原型模式 4.组合使用原型模式和构造函数模式 (常见的方式) 5.动态...

  • 对象的创建

    工厂模式 优点:避免创建多个对象时的重复代码问题 缺点:无法解决对象识别问题(不知道一个对象的类型) 构造函数模式...

  • 对象的创建

    1.给对象分配内存 两种方式:1.指针碰撞 2.空闲列表 2.线程安全性问题 3.初始化对象 4.执行构造方法

  • 对象的创建

    1.OC对象是什么? 从源码分析 objc.h objc-private.h: 其中uintptr_t是一个uns...

网友评论

      本文标题:第二节、对象的创建

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