摘要: ├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现) │ ├─os 操作系相关代码 阅读全文
posted @ 2021-01-11 14:49 大众思索 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 为啥加锁可以解决可见性问题呢?因为某一个线程进入synchronized代码块前后,线程会获得锁,清空工作内存,从主内存拷贝共享变量最新的值到工作内存成为副本,执行代码,将修改后的副本的值刷新回主内存中,线程释放锁。 而获取不到锁的线程会阻塞等待,所以变量的值肯定一直都是最新的。 阅读全文
posted @ 2021-01-11 00:48 大众思索 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 需要 原因: 防止指令重排; 其实在JAVA中进行new对象时, 有可能第一个线程进行创建的过程中,并且初始化完毕,第二个线程判断当前的指针不为空,则将对象返回,导致出错,所以需要加上volatile 阅读全文
posted @ 2021-01-11 00:25 大众思索 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 根据追踪volatile反编译的class文件解析后发现 ACC_VOLATILE,通过查阅官网规范发现这个方法底层调用 storeload->fence->汇编指令 lock add1 0 * 0 相当于什么都没有做,只是为了执行汇编lock指令防止重新排序 HSDIS(HotSpot disas 阅读全文
posted @ 2021-01-11 00:02 大众思索 阅读(85) 评论(0) 推荐(0) 编辑