zoukankan      html  css  js  c++  java
  • 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规则
      程序顺序规则,即一个线程内必须保证语义串行性
      锁规则,即对同一个锁的解锁一定发生在再次加锁之前

  • 相关阅读:
    vim delete
    npm ERR! network connect ETIMEDOUT
    在 ubuntu 14.04 Unity 中清除和关闭 Totem 播放记录
    ubuntu 14.04 上 jvpn 使用说明
    LWP::Protocol::https not installed
    perl 安装模块
    触摸屏工作方式
    如何检测死锁并快速定位死锁位置
    如何用 yum 的一个包替换另一个包
    shell 中 here documemt << 与 <<- 的区别
  • 原文地址:https://www.cnblogs.com/cdfive2018/p/12321321.html
Copyright © 2011-2022 走看看