7.2笔记(java的内存模型)

java的内存模型:

概念:定义了java程序中各个变量的访问,即在虚拟机中把java变量存到内存中以及如何从内存中取出变量的底层细节。

  • java内存模型规定了所有变量都存到主存上,每个线程都有自己的工作内存。线程在工作内存上保存了该线程使用变量的副本,线程只能在自己的工作内存上进行读取,赋值等操作,不能直接读写主存的变量。线程之间无法做到值传递,只有通过把值传给主存,其他线程才能从主存中进行读取变量。

主存和工作内存的操作类型:只需要保证顺序执行即可,不必连续执行

  • lock(锁定):把一个变量指定为某个线程的独占状态
  • unlock(解锁):解除变量的锁定状态,解锁后才能被其他线程锁定
  • read(读取):把主存的变量存储到线程自己的工作内存中
  • load(载入):read之后的操作,把主存读到的变量放入到工作内存的副本中
  • use(使用):把工作内存的变量传递给执行引擎,当出现使用使用变量的字节码指令时就执行这个操作
  • assign(赋值):把执行引擎的值传到工作内存,当jvm遇到赋值的字节码指令时就执行这个操作
  • store(存储):把工作内存的变量送到主内存中
  • write(写入):在主内存中执行,把从工作内存中的变量的值传送到主存的变量中

指令重排:

概念:在执行程序时为了提高性能,编译器和处理器会对指令进行重新排序

  1. 编译器优化的重排序。在不改变语义的条件下,可以重新安排语句的执行顺序。
  2. 指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
  3. 内存系统的重排序。由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。
posted @ 2021-07-02 15:23  今天不摸鱼  阅读(37)  评论(0)    收藏  举报