美文网首页
对象的创建

对象的创建

作者: 四喜汤圆 | 来源:发表于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>

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

    相关文章

      网友评论

          本文标题:对象的创建

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