zoukankan      html  css  js  c++  java
  • JMM(java Memory Model)到底是什么?

    经历过很多面试大部分都会问一句: 你知道Java内存模型么?  然后我就pulapula的说一大堆什么堆呀,栈呀,GC呀什么的,这段时间把JVM虚拟机和多线程编程完整的学习了一遍,发现JMM和堆/栈这些完全不是一个概念,不知道是不是就是因为这才被拒了十来次的 /尴尬。

    JVM是Java实现的虚拟计算机(Java Virtual Machine),对于熟悉计算机结构的同学,我感觉把这些概念和物理机对应起来更好理解。

    JVM对应的就是物理机,它有存放数据的存储区:堆、栈等由JVM管理的内存(对应于物理机的内存)、执行数据计算的执行单元:线程(对应于物理机的CPU)、加速线程执行的本次存储区:可能会从存储区里分配一块空间来存储线程本地数据,比如栈(对应于物理机的cache)。

    众所周知,现代计算机一般都会包含多个处理器,多个处理器共享主内存。为了提升性能,会在每个处理器上增加一个小容量的cache加速数据读写。cache会导致了缓存一致性问题,为了解决缓存一致性问题又引入了一系列Cache一致性协议(比如MSI、MESI、MOSI、Synapse、Firefly及Dragon Protocol)来解决CPU本地缓存和主内存数据不一致问题。

    而JVM中管理下的存储空间(包括堆、栈等)就对应与物理机的内存;

    线程本次存储区(例如栈)就对应于物理机的cache;

    而JMM就对应于类似于MSI、MESI、MOSI、Synapse、Firefly及Dragon Protocol这样的缓存一致性协议,用于定义数据读写的规则。

    JMM相对于物理机的缓存一致性协议来说它还要处理JVM自身特有的问题:重排序问题,参见: http://cmsblogs.com/?p=2116。

    那么JMM都有哪些内容呢? 

    官方文档: http://101.96.10.64/www.cs.umd.edu/~pugh/java/memoryModel/CommunityReview.pdf

    通俗理解就是happens-before原则 https://www.cnblogs.com/chenssy/p/6393321.html

  • 相关阅读:
    Android4.2以及最新SDK的尝鲜使用
    UVA 1524
    StringTokenizer类的使用
    Tuxedo入门学习
    ReviewBoard安装和配置札记
    一步一步写算法(之单向链表)
    腾讯2014年实习生招聘笔试面试经历
    二路单调自增子序列模型【acdream 1216】
    [置顶] c# 验证码生成
    Android Service 服务(一)—— Service
  • 原文地址:https://www.cnblogs.com/caiyao/p/9358842.html
Copyright © 2011-2022 走看看