当前位置:首页 > Java技术 > JVM和JMM内存模型

JVM和JMM内存模型

JVM内存模型

JVM内存模型主要指运行时的数据。
  • 线程独占

    • 栈(Stack)
      栈,也叫方法栈。
      线程私有的。
      线程在执行每个方法时都会同时创建一个栈帧,用来存储局部变量表、操作栈、动态链接、方法出口等信息。
      调用方法时执行入栈,方法返回时执行出栈。

    • 本地方法栈(Native Method Stack)
      与栈类似,native方法使用本地方法栈。

    • 程序计数器(Program Counter)
      每个线程工作时都有一个独立的计数器,保存着当前线程所执行的字节码位置。

  • 线程共享

    • 堆(Heap)
      线程共享。
      存放对象实例。

    • 方法区(Method Area)
      也叫非堆区。
      存放虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
      JDK1.7 永久代和JDK1.8 Metaspace都是方法区的实现。

JMM内存模型

 主内存、线程自己的工作内存
  • 原子性
    基本数据读写,如int a = 10;
    synchronized关键字

  • 可见性
    volatile关键字(强制内存同步保证不同的线程总是能够看到该变量的最新值,阻止指令重排序)
    synchronized关键字

  • 有序性
    volatile关键字(强制内存同步保证不同的线程总是能够看到该变量的最新值,阻止指令重排序)
    synchronized关键字

  • happens-before规则
    程序顺序规则,即一个线程内必须保证语义串行性
    锁规则,即对同一个锁的解锁一定发生在再次加锁之前

作者:cdfive
来源链接:https://www.cnblogs.com/cdfive2018/p/12321321.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/java/68190.html

分享给朋友: