摘要:
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)

浙公网安备 33010602011771号