 
 
 
new 是向内存申请空间
invokespecial 调用空构造器  成员变量附默认值 0
astore  建立关联  t 与内存对象
 
下面的程序有可能执行指令重排 在int  num=8 之前要进行
成员变量附初始值 num=0
但是在这之前 建立关联 会先执行 先建立关联 然后再执行构造方法
 会先执行输出语句(而且输出语句是线程安全的)
 
 

 
 
假如我们new T()对象  首先java.c 编译成。class 字节码  
然后将字节码Load到内存
这里会进行双亲委派的过程  如果这个类被加载过,在缓存中 , 那么直接加载,
否则会逐层向上查询是否被加载
首先是application 然后是extention (引用包)最后是bootstrap  lib包
若顶级父加载器没有加载 那么会逐层向下 让其取加载
类加载完成后进行字节码的验证(也就是linking中的verification)
判断是否是以cafebabe 开头的16进制字节码  通过校验后
进入perpartion 将类的静态变量初始化为默认值  static int a=3  此时a =0
后面进入resolution 进行解析 将符号引用转换为直接引用
最后进入initializing 为静态变量附初始值 此时 a=3  执行静态代码块
4然后申请对象内存
5成员变量附默认值 int  i=8  先将i=0
6调用构造方法 在字节码层面<init>
    6.1在调用构造方法的时候 才会给成员变量附初始值
    6.2执行构造方法语句 首先会调用super() 先调用父类的构造器
7建立引用和内存地址的关联 a_store  但是这个第七步很有可能进行指令重排  造成成员变量 赋值失败为中间值 0  this对象溢出