`
BruceChan_GY
  • 浏览: 6975 次
社区版块
存档分类
最新评论

HSDIS对volatile的浅析

    博客分类:
  • JVM
阅读更多
HSDIS有什么用?用来看汇编,有用么? 答案是有用的。

举个最简单的例子,volatile,是java关键字,那在汇编层面是如何做的呢?

示例代码:

import java.util.*;

public class VolatileTest {  
    public volatile long value = 0;  
    
    public static void main(String[] args) {  

        VolatileTest t = new VolatileTest();

        t.value = 3;
  
        System.out.println("value is: " + t.value);  
 
    }  
}  


编译
root@ubuntu:~/Downloads# javac VolatileTest.java 


运行
root@ubuntu:~/Downloads# java -Xcomp  -server -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints VolatileTest > disass.log 


查看disass.log,寻找相关的汇编代码:

 
0x00007f8f9446d688: lock addl $0x0,(%rsp)     ;*putfield value
                                                ; - VolatileTest::<init>@6 (line 4)


结合putfield value 和 bytecode, 可以知道这条指令就是 对value的赋值操作。

看见了什么? lock


补充:


关于lock,可以参考64-ia-32-architectures-software-developer-manual

截取2段:

Intel 64 and IA-32 processors provide a LOCK# signal that is asserted automatically during certain critical memory operations to lock the system bus or equivalent link. While this output signal is asserted, requests from other processors or bus agents for control of the bus are blocked. 


To explicitly force the LOCK semantics, software can use the LOCK prefix with the following instructions when they are used to modify a memory location.
分享到:
评论

相关推荐

    Volatile详解,深入学习Volatile

    详细说明 并举例说明了VOlatile的作用及用法,特别是嵌入式程序员要注意的

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

    volatile和原子操作有没有关系,我的实验+别人论文

    对volatile的原子性做探究,加上自己的实验代码和实验结果! Case多核?单核?是否有volatile是否编译器优化-O2结果!

    C语言中关键字volatile的作用

    C语言中关键字volatile的作用,使用说明和例子

    volatile的使用

    3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义; 另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来...

    从汇编角度理解volatile

    一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要...

    const和volatile分析

    const和volatile分析 这个分析得很好 面试 找工作 必备的

    volatile变量详解

    容易忽略的变量声明,但是很重要 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.

    volatile的用法讲解

    volatile的用法讲解,讲得很详细,希望能帮助到大家

    volatile的使用方法

    C程序中volatile关键字的使用.方法及其例程介绍。

    Java线程:volatile关键字

    主要讲述java线程volatile关键字

    const,extern,static,volatile的使用

    const,extern,static,volatile的使用

    volatile的用法

    volatile的用法,在写代码正确使用volatile,正确理解volatile的用法,增强代码的健壮性

    单片机C语言中volatile的作用

    本文给大家介绍了单片机C语言中volatile的作用。

    volatile与synchronized的区别

    volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)

    static,const,volatile用法

    static,const,volatile用法的解析,对三项中全局变量和局部变量的区分,volatile中介绍了其具体用法 和一些区别,bong有例子

    volatile_unsigned_int

    讲述了volatile_unsigned_int地址映射的使用说明。

    C中volatile_const解析

    C中volatile_const解析,可以让你对这两个关键字在嵌入式的过程中有更深刻的认识,从而提高你自己的c语言开发能力

    volatile用法

    c语言下关键字的volatile用法,包含一些基本例子

    volatile源码分析1

    前言Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论,但似乎讨论不出一个完美的结果,带着种种疑惑,准备从JVM、

Global site tag (gtag.js) - Google Analytics