zoukankan      html  css  js  c++  java
  • 创建对象的步骤

    1. 判断对象对应的类是否被加载,链接,初始化

      虚拟机遇到一条new 指令,首先求检查这个和这个符号引用代表的类是否被加载,链接和初始化,即:判断类元信息是否存在)。如果没有,那么双亲委派机制模式下,使用当前类加载器以ClassLoader+包名+类名为key进行查找对应的.class文件。如果,没有查找到文件,则抛出ClassNotFoundException异常,如果找到,则加载,并生成对应的Class对象。

    2.  为对象分配内存

      计算对象占用内存的大小(引用类型4个字节),接着在堆中划分一块内存给新对象

      - 如果内存完整----指针碰撞

      - 如果内存不完整----空闲列表分配(在K线列表找足够的内存)

    3. 处理并发问题

      - 采用CAS失败重试,区域加锁保证更新原子性

      - TLAB(线程本地缓存区)

    4. 初始化分配到的空间,即:默认初始化,保证对象在不赋值时可以直接使用

    5. 设置对象的对象头(将对象的类信息(指向方法区),hashCode,GC信息,锁信息等他数据存储在对象头中)

    6. 执行init方法进行初始化

  • 相关阅读:
    Redis杂谈
    General mistakes in parallel computing
    life of a NPTL pthread
    casting in C++
    function calling convention
    How exception works ?
    How `delete’ works ?
    How `new’ operator works ?
    老白的JAVA课程17 集合
    老白的JAVA课程16 卡片布局 javaBean
  • 原文地址:https://www.cnblogs.com/isalo/p/15499042.html
Copyright © 2011-2022 走看看