美文网首页
对象的创建

对象的创建

作者: 四喜汤圆 | 来源:发表于2018-04-09 10:59 被阅读56次

一、创建过程

对象创建过程.png

二、重点说明

1.在Java堆中为对象分配内存空间

分配方法

有两种主流方法:指针碰撞;空闲列表。

具体使用哪一种取决于堆是否规整,堆是否规整取决于JVM所采用的垃圾回收器是否具有压缩整理功能。

分配时的线程安全问题

解决方法:

  1. 分配内存空间的动作进行同步处理——实际上虚拟机采用CAS配上失败重试的方法
  2. 把内存分配的动作按照线程分配在不同的空间中进行(Thread Local Allocation Buffer,TLAB)。哪个线程要分配内存,就在线程的TLAB上分配,当TLAB用完重新分配时进行加锁。

2.虚拟机将分配到的内存空间(不包括对象头)都初始化为零值

对象的内存布局是:对象头,实例数据,对齐填充

  1. 对象头:1)存储对象自身运行时的数据(哈希码、GC分代年龄、锁标志等);2)类型指针,指向它的类元数据(通过该指针知道它是哪个类的实例)【该区域可无】
  2. 实例数据:就是类中声明的实例变量的值(无论是从父类继承下来的,还是在子类中定义的,都要记录下来
  3. 对齐填充:无实际意义。因为JVM要求对象占用的存储空间必须是8字节的整数倍,故通过对齐填充来补齐

3.<init>

由编译器自动收集类中所有实例变量 声明时赋的初值初始化块中赋的初值构造函数中赋的初值

相关文章

  • 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...

  • 对象的创建

    JavaScript中的对象实际上是键值对的集合,如何去创建一个对象呢?有以下方法: 字面量创建(Object L...

网友评论

      本文标题:对象的创建

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