Java:将代码拆分为其原子表示

时间:2014-08-08 08:05:27

标签: java atomicity

在Java中,只有少数东西被认为是原子的(What operations in Java are considered atomic?)。例如,i ++由3种不同的原子操作组成:将i加载到寄存器中,将1加到该寄存器中,将寄存器的新值写回i。这样的事情。

我的问题:是否有可能将Java代码“解析”为原子表示的序列?因此,当输入是“i ++”时,我不希望将i ++作为输出,我想要“加载我注册”,“添加1到注册”,“写入我从寄存器返回”。这可能吗?

谷歌搜索对这个话题没什么帮助。

2 个答案:

答案 0 :(得分:1)

是和否。简短的回答:它会非常努力。

代码在到达硬件之前会经历几个步骤,您可以在其中解析'原子表示。

首先将其编译为字节码。这已经更接近机器代码,但还不是你想要的。您可以通过在可以解析字节码的编辑器中打开类文件来阅读它(Eclipse IDE可以执行此操作)。 运行程序时,Java虚拟机将执行您的字节码。根据具体情况,它可以将字节码作为脚本引擎执行,将其编译为机器代码或更改字节码,然后执行它以获得更好的性能。 Java虚拟机的功能取决于系统,系统上的当前负载和字节码。因此,实际上不可能预测它之前会产生的实际机器代码。

对于特定的代码运行,您可以使用IDA等汇编调试器(反汇编程序)。它允许您以汇编代码的形式查看系统上正在执行的内容。您很可能会看到许多代码是Java虚拟机的一部分,而不是您的程序。这将使事情变得更加困难。

答案 1 :(得分:0)

在Java中,您没有注册访问权限或汇编代码访问权限。实现上述目标的唯一方法是使用java.util.conrrent.atomic包中提供的Atomic类。但是,除非您在多线程背景下执行此操作,否则这将比简单的i ++更昂贵。