摘要: 1 new 的时候 向内存申请一块内存空间 此时T对象里面有成员变量 m 此时的m=0 半初始化状态 当执行invokespecial 时会执行该类的构造方法 只有当运行到这里的时候 m=8 a_store 建立关联 volatile 有两大作用 1 线程可见 2 禁止重排 什么叫重排? 当指令看上 阅读全文
posted @ 2022-04-25 23:23 花心大萝卜li 阅读(36) 评论(0) 推荐(0)
摘要: new 是向内存申请空间 invokespecial 调用空构造器 成员变量附默认值 0 astore 建立关联 t 与内存对象 下面的程序有可能执行指令重排 在int num=8 之前要进行 成员变量附初始值 num=0 但是在这之前 建立关联 会先执行 先建立关联 然后再执行构造方法 会先执行输 阅读全文
posted @ 2022-04-25 22:13 花心大萝卜li 阅读(427) 评论(0) 推荐(0)
摘要: 使用volatile 若果 cpu1 修改的x 和cpu2 修改的y 中 xy 位于同一缓存行 那么 操作x的时候会更新y 操作y的时候会更新x 阅读全文
posted @ 2022-04-25 21:55 花心大萝卜li 阅读(20) 评论(0) 推荐(0)
摘要: 可以比方理发师理发 sysnchronized 是严重阻塞 会将你锁进小屋 什么时候轮到你了 你在出来 这个期间状态是 blocked waiting 是理发师正在理发 cpu正在处理其他线程 这时候 wait() join() lock() 等的状态是waiting 坐在那里等着 理发师啥时候叫他 阅读全文
posted @ 2022-04-25 17:10 花心大萝卜li 阅读(25) 评论(0) 推荐(0)
摘要: 当class 文件加载到内存的时候 可以用agent截获class 文件 并做出修改 当然也可以查看对象的大小 String name; 对应的是oops 成员变量的指针 string 是引用数据类型 正常占8个字节 但开启了oops 普通对象指针压缩 4 int 4字节 byte 1字节 对象引用 阅读全文
posted @ 2022-04-25 10:21 花心大萝卜li 阅读(32) 评论(0) 推荐(0)
摘要: java -XX:+PrintCommandLineFlags -version 首先 T t=new T();的时候 该内被加载到内存时 该对象是普通对象 1该对象被jvm称为对象头markword 8个字节 2classPointer 指针 也就是t 为4个字节 指向对应的class 3实例数据 阅读全文
posted @ 2022-04-25 09:21 花心大萝卜li 阅读(44) 评论(0) 推荐(0)
摘要: 假如我们new T()对象 首先java.c 编译成。class 字节码 然后将字节码Load到内存 这里会进行双亲委派的过程 如果这个类被加载过,在缓存中 , 那么直接加载, 否则会逐层向上查询是否被加载 首先是application 然后是extention (引用包)最后是bootstrap 阅读全文
posted @ 2022-04-25 09:08 花心大萝卜li 阅读(89) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2022-04-25 08:42 花心大萝卜li 阅读(23) 评论(0) 推荐(0)
摘要: 字节码层面没有动 只是编译成class文件 具体实现是在jvm 层面 在volatile 执行写操作时 上面的写操作和下面的写操作不能指令重排 同样读的时候 volatile 上面的读操作和下面的读操作不能进行指令重排 volatile 就相当于是内存屏障 保证有序性 阅读全文
posted @ 2022-04-25 08:31 花心大萝卜li 阅读(44) 评论(0) 推荐(0)