JVM - 【对象实例化过程】6个阶段

对象实例化过程 - 六个阶段


  • 加载类元信息至"方法区"
  • 在堆中分配内存
    • 内存规整
    • 内存不规整
  • 处理并发问题
    • 加锁
    • 设置TLAB(Thread Local Allocation Buffer)
      • -XX:+UserTLAB
      • -XX:TLABWasteTargetPercent=1%
  • 默认赋值
    • 成员变量赋默认值
    • < clinit >
  • 设置对象头信息
  • 显式初始化
    • 成员变量
    • 代码块
    • 构造函数(< init >)


一:显式初始化阶段

package xyz.xx.chapter10;

/**
 * 变量初始化顺序测试
 *
 *      XiaoMing
 *      30
 *      false
 *      40
 */
public class VariableInitialTest {
     
    public static void main(String[] args) {
     
        User u = new User();
        System.out.println(u.name);
        System.out.println(u.age);
        System.out.println(u.sex);
        System.out.println(u.x);
    }
}

/**
 * 类加载的6个阶段
 *      加载类元信息
 *      分配内存
 *          内存规整
 *          内存不规整
 *      处理并发(TLAB)
 *          -XX:+UseTlab
 *          -XX:TLABWasteTargetPercent=1%
 *      默认初始化
 *      设置对象头信息
 *      显式初始化
 *
 * 显式初始化顺序
 *      1. 显式初始化
 *      2. 代码块中初始化
 *      3. 构造函数中初始化 
 */
class User{
     
    public User(){
     
        age = 30;
        x = 40;
    }

    static{
     
        x = 10;
    }

    {
     
        x = 30;
        age = 20;
    }

    static int x = 0;
    String name = "XiaoMing";
    int age = 10;
    boolean sex = false;

}

二:对象头信息(Header)

参考文章:JVM -【对象内存布局】3部分





结束标记

你可能感兴趣的:(JVM,java,jvm,对象实例化过程)