Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果(“即Java程序的 write once run anywhere”). 在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,在某些场景就必须针对不同的平台来编写程序. 1.主内存和工作内存 Java内存模型的主要目标是定义程序中各个变量的访问…
我们先来看一个反常识的例子. int a=0, b=0; public void method1() { int r2 = a; b = 1; } public void method2() { int r1 = b; a = 2; } 这里我定义了两个共享变量 a 和 b,以及两个方法.第一个方法将局部变量 r2 赋值为 a,然后将共享变量 b 赋值为 1.第二个方法将局部变量 r1 赋值为 b,然后将共享变量 a 赋值为 2.请问(r1,r2)的可能值都有哪些? 在单线程环境下,我们可以先调…
JVM整体结构与内存模型之间的关系 JVM整体结构图如下: 先贴一个代码: package com.jvm.jvmCourse2; public class Math { public static int INITDATA = 666; public Math() { } public int compute() { int a = 1; int b = 2; int c = (a + b) * 10; return c; } public static void main(String[]…