面试整理

java 创建对象流程

  1. 类加载器加载

    这个时候会通过双亲委派机制,检查自己是否加载过此类,如果没有,则通过 parent 属性调用父级类加载器检查是否加载过此类,如
    parent 属性中为 null

    则调用 BootStrap 类加载器检查是否加载,若未加载此类,如果尝试加载,若加载失败,则传递给下一级类加载器加载

  1. 分配内存

    此时会通过逃逸分析判断是否是此对象只会在方法内部中调用,如果是则在栈中创建,如果不是则放入堆中,

    而分配方法有指针碰撞或者空闲列表两种,指针碰撞则是有序排列,如果放入时大于等于指针位置,则会将指针后移,空闲列表则是不规整排列,需要维护一个空闲内存的列表,寻找空闲位置存放

  2. 初始化

    此步会给对象字段赋值默认值

  3. 设置对象头

    对象头中会有一些 hash 值,锁标志,分代年龄,线程 id 等,类型指针,指向类的元数据信息

  4. 执行 () 方法

    按照指定值给属性赋值。