第二篇:认识ISA(Instruction Set Architecture) 重要概念: [ISA] [IA-32]:Intel把32位x86架构的名称x86-32改称为IA-32,一种身边很常见的ISA [内存模型] [过程调用] •ISA(Instruction Set Architecture)位于软件和硬件之间 •硬件的功能通过ISA提供出来 •软件通过ISA规定的"指令"使用硬件 •ISA规定了: –可执行的指令的集合,包括指令格式.操作种类以及每种操作对应的操作数的相应规…
多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系.物理机的并发问题与虚拟机中的情况有很多相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考意义. 由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不…
上一篇我们介绍了JVM的基本运行流程以及内存结构,对JVM有了初步的认识,这篇文章我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存模型 首先我们思考一下一个java线程要向另外一个线程进行通信,应该怎么做,我们再把需求明确一点,一个java线程对一个变量的更新怎么通知到另外一个线程呢?我们知道java当中的实例对象.数组元素都放在java堆中,java堆是线程共享的.(我们这里把java堆称为主内存),而每一个线程都是自己私有…
文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: 方法区 堆 虚拟机栈 本地方法栈 程序计数器 程序计数器 定义 程序计数器是一个块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指令器.程序计数器记录的是当前线程正在执行的那一条字节指令的地址. 如果当前线程正在执行的是一个本地方法,那么程序计数器为空. 作用 程序计数器有两个作用: 字节…
Java 内存模型,许多人会错误地理解成 JVM 的内存模型.但实际上,这两者是完全不同的东西.Java 内存模型定义了 Java 语言如何与内存进行交互,具体地说是 Java 语言运行时的变量,如何与我们的硬件内存进行交互的.而 JVM 内存模型,指的是 JVM 内存是如何划分的. Java 内存模型是并发编程的基础,只有对 Java 内存模型理解较为透彻,我们才能避免一些错误地理解.Java 中一些高级的特性,也建立在 Java 内存模型的基础上,例如:volatile 关键字.为了让大家能…
目录 计算机系统的一致性 Java内存模型 内存模型的3个重要特征 原子性 可见性 有序性 指令重排序 volatile关键字 保证可见性和防止指令重排 不能保证原子性 计算机系统的一致性 在现代计算机操作系统中,多任务处理几乎是一项必备的功能,因为嵌入了多核处理器,计算机系统真正做到了同一时间执行若干个任务,是名副其实的多核系统.在多核系统中,为了提升CPU与内存的交互效率,一般都设置了一层 "高速缓存区" 作为内存与处理器之间的缓冲,使得CPU在运算的过程中直接从高速缓存区读取数据…
内部java内存模型 硬件层面的内存模型 Java内存模型和硬件内存模型的联系 共享对象的可见性 资源竞速 Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操作系统,作为一个操作系统就有内存模型,这就是我们常说的JAVA内存模型. 如果我们想正确的写多线程的并行程序.理解好java内存模型在多线程下的工作方式是及其重要的,这可以帮我们更好的理解底层的工作方式. java内存模型说明了不同的线程怎样以及何时可以看到其他线程写入共享变量的值,以及同步程序怎么…
概要 文章是<深入理解Java内容模型>读书笔记,该书总共包括了3部分的知识. 第1部分,基本概念 包括"并发.同步.主内存.本地内存.重排序.内存屏障.happens before规则.as-if-serial规则.数据依赖性.顺序一致性模型.JMM的含义和意义". 第2部分,同步机制 该部分中就介绍了"同步"的3种方式:volatile.锁.final.对于每一种方式,从该方式的"特性"."建立的happens befo…
类似物理上的计算机系统,Java虚拟机规范中也定义了一种Java内存模型,即Java Memory Model(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果.现在最新的Java内存模型规范是JSR-133,即Java内存模型与线程规范,这套规范包含:线程之间如何通过内存通信:线程之间通过什么方式通信才合法,才能得到期望的结果. 理解内存模型对Java的并发编程有很大的帮助. >>Java内存模型 JMM决定一个线程对共享变量的写入何…
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果(“即Java程序的 write once run anywhere”). 在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,在某些场景就必须针对不同的平台来编写程序. 1.主内存和工作内存 Java内存模型的主要目标是定义程序中各个变量的访问…