Tag: x86

了解Java中的易失性和非易失性读/写

我的java代码如下 public class MyClass { volatile int voltile ; //7 int nonVoltile ; //8 public static void main(String[] args) { for(int i=1; i<100000; i++){ f(); } } static void f(){ //16 MyClass t = new MyClass(); //17 t.voltile = t.nonVoltile; //18 t.nonVoltile = 0x11111; //20 t.voltile = 0x22222; //21 t.nonVoltile = t.nonVoltile + 1; //23 […]

理解记忆障碍

我试图在一个对java无锁程序员有用的级别上理解内存障碍。我觉得这个级别介于学习挥发性和从x86手册学习存储/加载缓冲区的工作之间。 我花了一些时间阅读一堆博客/烹饪书,并提出了以下摘要。 有更多知识渊博的人可以查看摘要,看看我是否遗漏了错误或列出的内容。 LFENCE: Name : LFENCE/Load Barrier/Acquire Fence Barriers : LoadLoad + LoadStore Details : Given sequence {Load1, LFENCE, Load2, Store1}, the barrier ensures that Load1 can’t be moved south and Load2 and Store1 can’t be moved north of the barrier. Note that Load2 and Store1 can still be reordered. Buffer Effect : Causes […]

字节码指令与处理器操作之间的关系

Java规范保证原始变量赋值始终是primefaces的(期望long和双types 。 相反,对应于着名的i++增量操作的Fetch-and-Add操作将是非primefaces的,因为导致读 – 修改 – 写操作。 假设这段代码: public void assign(int b) { int a = b; } 生成的字节码是: public void assign(int); Code: 0: iload_1 1: istore_2 2: return 因此,我们看到赋值由两个步骤组成(加载和存储)。 假设这段代码: public void assign(int b) { int i = b++; } 字节码: public void assign(int); Code: 0: iload_1 1: iinc 1, 1 //extra step here […]

JRE 32位对比64位

我一直在使用Java一段时间,而我设置新开发机器的典型仪式需要从Oracle网站下载和安装最新JDK的规范。 这引发了一个不寻常的问题, does it matter if I use the 32bit or 64bit JRE bundle? 从回想起来,我之前已经安装了两个版本,我的正常工具链很快就插入(Eclipse)。 在我的日常编程中,我不记得曾经因为我使用的是64位JRE(或针对这方面针对64位JRE)而不得不以不同的方式改变某些东西或思考某些东西。 根据我对64位与32位的理解 – 它实际上归结为数字如何存储在封面下…我知道int是32位而long是64位…同样float为32位且double是64位 – 所以它只是Java已经抽象出这个微妙之处,并且可能一直是“64位兼容”吗? 我确定我在这里缺少一些东西,除了无法在32位系统上安装64位JRE。