当前位置: 首页 > news >正文

做网站分为哪些功能的网站黑色 网站模板

做网站分为哪些功能的网站,黑色 网站模板,dw软件做的东西怎么在网站用,网站开发经验与教训范文哈喽,大家好🎉,我是世杰。 本文我为大家介绍面试官经常考察的**「Java内存模型JMM相关内容」** 面试连环call 什么是Java内存模型(JMM)? 为什么需要JMM?Java线程的工作内存和主内存各自的作用?Java缓存一致性问题?Java的并发编程问题? …

面试官

哈喽,大家好🎉,我是世杰

本文我为大家介绍面试官经常考察的**「Java内存模型JMM相关内容」**

面试连环call

  1. 什么是Java内存模型(JMM)? 为什么需要JMM?
  2. Java线程的工作内存和主内存各自的作用?
  3. Java缓存一致性问题?
  4. Java的并发编程问题?

要想理解透彻 JMM(Java 内存模型),我们先要从 『硬件内存结构』 说起。让我们开始吧!🎉🎉🎉

1. 硬件内存结构

1.1 CPU 缓存模型

img

(1)CPU Register

CPU Register 也就是 CPU 寄存器。CPU 寄存器是 CPU 内部集成的,在寄存器上执行操作的效率要比在主存上高出几个数量级。

(2)CPU Cache Memory

CPU Cache Memory 也就是 CPU 高速缓存,相对于寄存器来说,通常也可以成为 L2 二级缓存。相对于硬盘读取速度来说内存读取的效率非常高,但是与 CPU 还是相差数量级,所以在 CPU 和主存间引入了多级缓存。CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。

(3)Main Memory

Main Memory 就是主存,主存比 L1、L2 缓存要大很多。

1.2 缓存一致性问题

由于主存与 CPU 处理器的运算能力之间有数量级的差距,所以在传统计算机内存架构中会引入高速缓存来作为主存和处理器之间的缓冲。先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。

但是,这样存在 内存缓存不一致性的问题 !比如我执行一个 i++ 操作的话,如果两个线程同时执行的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 i++ 运算完之后再写回 Main Memory 之后 i=2,而正确结果应该是 i=3。

CPU 为了解决内存缓存不一致性问题可以通过**制定缓存一致协议(比如 [MESI 协议open in new window])**或者其他手段来解决。 这个缓存一致性协议指的是在 CPU 高速缓存与主内存交互的时候需要遵守的原则和规范。不同的 CPU 中,使用的缓存一致性协议通常也会有所不同。

img

1.3 指令重排序

什么是指令重排序? 简单来说就是系统在执行代码的时候并不一定是按照你写的代码的顺序依次执行。

常见的指令重排序有下面 2 种情况:

  • 编译器优化重排:编译器(包括 JVM、JIT 编译器等)在不改变单线程程序语义的前提下,重新安排语句的执行顺序。
  • 指令并行重排:现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
  • 内存系统的重排序:由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。

img

Java 源代码会经历 编译器优化重排 —> 指令并行重排 —> 内存系统重排 的过程,最终才变成操作系统可执行的指令序列。


2. Java内存模型

2.1 Java内存与硬件内存

之前讲 JVM 运行时内存区域时,聊到 JVM 分为栈、堆等,这些都是 JVM 定义的概念。在传统的硬件内存架构中是没有栈和堆这种概念。从图中可以看出栈和堆既存在于高速缓存中又存在于主内存中,所以Java内存和硬件内存没有直接的关系。

img

2.2 Java内存与主内存

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

(2) 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。

(3) 不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递都需要通过主内存来完成。

jmm

  • 主内存:所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量,还是局部变量类信息常量静态变量都是放在主内存中。为了获取更好的运行速度,虚拟机及硬件系统可能会让工作内存优先存储于寄存器和高速缓存中。

  • 本地内存:每个线程都有一个私有的本地内存,本地内存存储了该线程以读 / 写共享变量的副本。每个线程只能操作自己本地内存中的变量,无法直接访问其他线程的本地内存。如果线程间需要通信,必须通过主内存来进行。本地内存是 JMM 抽象出来的一个概念,并不真实存在,它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

为了更好的控制主内存和本地内存的交互,Java 内存模型定义了八种操作来实现:

『主内存』

  • lock:锁定。作用于主内存的变量,把一个变量标识为一条线程独占状态

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

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

  • write:写入。作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中

『工作内存』

  • load:载入。作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中

  • use:使用。作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作

  • assign:赋值。作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作

  • store:存储。作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作


3. 再聊并发编程

熟悉 Java 并发编程的同学肯定对这三个问题很熟悉:『可见性问题』『原子性问题』『有序性问题』

3.1 有序性

由于指令重排序问题,代码的执行顺序未必就是编写代码时候的顺序。我们上面讲重排序的时候也提到过:指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致 ,所以在多线程下,指令重排序可能会导致一些问题。

在 Java 中,volatile 关键字可以禁止指令进行重排序优化。

3.2 原子性

一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行

在 Java 中,可以借助synchronized、各种 Lock 以及各种原子类实现原子性。

3.3 可见性

当一个线程对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。

在 Java 中,可以借助synchronizedvolatile 以及各种 Lock 实现可见性。


参考文章

  1. Java 内存模型引入

  2. JMM(Java 内存模型)详解

  3. 说说什么是Java内存模型?

  4. 从 CPU 讲起,深入理解 Java 内存模型!


更多惊喜

我还将定期分享:

  • 最新互联网资讯:让你时刻掌握行业动态。

  • AI前沿新闻:紧跟技术潮流,不断提升自我。

  • 技术分享与职业发展:助你在职业生涯中走得更远、更稳。

  • 程序员生活趣事:让你在忙碌的工作之余找到共鸣与乐趣。

关注回复【1024】惊喜等你来拿!

点击查看惊喜

敬请关注【程序员世杰】

点击关注程序员世杰

http://www.15wanjia.com/news/167769.html

相关文章:

  • 网站开发咨询昆明seo博客
  • 未注册网站开网站供免费下载
  • 免费网站在线观看人数在哪直播微信公众号怎么进行网站建设
  • html5行业网站拼多多网页设计尺寸
  • 哪些网站有中文域名wordpress king主题
  • 永州网站推广做的网站没法用能否拒绝付工资
  • 网站建设有哪些岗位wordpress怎么对接公众号
  • 做汽车团购网站网站后台程序开发教程
  • 网站策划书编写wordpress主题 插件下载
  • 网站备案审核流程北京网站建设策划解决方案
  • 兰州网站建设技能论文做外贸有效的网站
  • 太原企业网站制作公司成都哪里好玩适合小孩
  • 网站流量统计查询企业网站有那些
  • 厦门方易网站制作有限公司网页网站制作培训班
  • h5网站和响应式网站区别制作网页如何给背景设置颜色
  • 布吉网站建设价格网站下载app免费
  • 网站怎么推广效果最好常州微信网站建设案例
  • 网站设计的思路百度下载并安装到桌面
  • 网站获取用户企业官网
  • 新公司注册在哪个网站Wordpress xml 格式
  • PHP手机网站开发工程师app开发费用标准
  • 网站超级链接怎么做开源商城网站
  • 宁波品牌网站设计做网站之前要先购买服务器吗
  • 专业创业服务平台网站建设需求有产品做推广,选哪个 网站
  • 微信分享 淘宝网站 怎么做福田欧曼银河报价
  • 网站被k多久恢复小公司没网站
  • 湘西北京网站建设dw网页制作知识点
  • 个人网站建站指南万网归一什么时候启动
  • 建设银行租房网站首页广东建设业协会网站
  • 如何查找昆明公司的网站网页设计师的发展路径