欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-24 21:09:21
...

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


  • 加载类元信息至"方法区"
  • 在堆中分配内存
    • 内存规整
    • 内存不规整
  • 处理并发问题
    • 加锁
    • 设置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. 构造函数中初始化 <init>
 */
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 - 【对象实例化过程】6个阶段