美文网首页
JVM-7-线程内存模型

JVM-7-线程内存模型

作者: 宠辱不惊的咸鱼 | 来源:发表于2019-09-30 08:54 被阅读0次

计算机缓存模型

jvm-002.jpg

java缓存模型

  • 主内存主要对应堆

  • 工作内存属于线程私有,可能是cpu寄存器或者高速缓存


    jvm-003.jpg
  • 原子操作

    • lock(锁定):作用于主内存变量,把一个变量标志为一个线程独占状态

    • unlock(解锁):作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定

    • read(读取):作用于主内存变量,把一个变量的值从主内存传输到线程工作内存中,供随后的load动作使用

    • load(载入):作用于工作内存变量,把read操作的结果放入工作内存的变量副本中

    • use(使用):作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎

    • assign(赋值):作用于工作内存变量,把一个从执行引擎接受到的值赋给工作内存的变量

    • store(存储):作用于工作内存变量,把工作内存中一个变量的值传送到主内存中,供随后的write操作使用

    • write(写入):作用于主内存变量,把store操作的结果放入主内存的变量中


      jvm-004.jpg
    • 此处的lock和unlock属于底层操作,未开放

    • 开放的是字节码monitorenter和monitorexit,即synchronized

  • 可见性

    • volatile强制变量被线程访问时,从主内存重读;修改时,写回主内存
  • 有序性

    • 本线程内观察,均有序
    • 本线程观察别的线程,均无序
//线程1:
context = loadContext();   //语句1
inited = true;             //语句2
 
//线程2:
while(!inited ){
  sleep()
}
doSomethingwithconfig(context);

操作系统线程实现

  • native:往往意味着未使用或无法使用平台无关的方式实现
  • 实现方式
    • 使用内核线程实现

      • 以内核线程实现轻量级进程,供应用程序调用
      • 弊端:涉及系统调用,消耗内核资源


        jvm-005.jpg
    • 使用用户线程实现

      • 应用进程使用多个用户线程
      • 弊端:缺少内核支持,阻塞处理和多处理器映射等困难


        jvm-006.jpg
    • 使用用户线程加轻量级进程混合实现


      jvm-007.jpg

java线程实现

  • JDK 1.2之前基于用户线程实现
  • JDK 1.2开始基于操作系统原生线程实现,意味着平台相关
  • 目前Windows和Linux都是基于轻量级进程实现,即1:1模型

线程调度

  • 抢占式调度,系统自动完成
  • 优先级,给系统一些“建议”
  • 由于java线程是操作系统原生线程,实际调度取决于操作系统
  • Windows提供了7个级别,而java是10个


    jvm-008.jpg

线程状态转化

jvm-009.jpg

相关文章

  • JVM-7-线程内存模型

    计算机缓存模型 java缓存模型 主内存主要对应堆 工作内存属于线程私有,可能是cpu寄存器或者高速缓存jvm-0...

  • 并发环境下指令重排带来的问题

    JVM内存模型 - 主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个...

  • volatile实现原理

    一、内存模型Java内存模型分为主内存和线程工作内存两大类。主内存:多个线程共享的内存。如下图所示,方法区和堆属于...

  • 高效并发

    从JVM的角度看一下Java与线程,内存模型,线程安全以及JVM对于锁的优化 硬件内存模型与JVM内存模型 硬件的...

  • Java内存模型精讲

    1.JAVA 的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存...

  • volatile和synchronized的作用以及两者的区别是

    java的线程抽象内存模型 java的线程抽象内存模型中定义了每个线程都有一份自己的私有内存,里面存放自己私有的数...

  • C++内存模型

    内存模型是多线程环境能够可靠工作的基础,因为内存模型需要对多线程环境的运作细节进行完备的定义。 内存模型通过共享数...

  • volatile关键字详解

    1.Java内存模型 Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的...

  • Java内存模型

    Java内存模型 内存模型抽象 Java中每个线程都有自己的工作内存,每个工作内存都有变量的一个副本,线程对变量的...

  • 第12章 Java内存模型与线程

    第12章 Java内存模型与线程 12.3Java内存模型 Java内存模型 [1](Java Memory Mo...

网友评论

      本文标题:JVM-7-线程内存模型

      本文链接:https://www.haomeiwen.com/subject/nzlcpctx.html