Java第八周学习笔记

  1. 什么是JMM?(java memory model)

JMM 即 Java 内存模型

多线程下 Java 代码的执行顺序,共享变量的读写

  1. 你写的代码,未必是实际运行的代码

代码的编写顺序,未必是实际执行顺序

  1. 多线程下,读写共享变量会有哪些问题?

可见性。有序性,原子性。

  1. 可见性的问原因:JIT编译器(会把一些热点代码及进行优化)所以造成可见性的问题。
  2. (工具)JavaP -c -v class路径  反编译(javaclass的字节码反编译成JVM的字节码指令)
  3. Jcstress压测工具
  4. 如果让一个线程总是占用 CPU 是不合理的,任务调度器会让线程分时使用 CPU

编译器以及硬件层面都会做层层优化,提升性能:

Compiler/JIT 优化

Processor(CPU) 

流水线优化 Cache 优化

  1. 流水线的目的:流水线在 CPU 的一个时钟周期内会执行多个指令的不同部分。
  2. CPU的非流水线的操作

  1. CPU的流水线操作

 

  1. CPU的一个优化措施

在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞

如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。这样,执行单元就可以总是处于工作状态,把时间浪费减到最少。

例如: //3 会被重排到 //2 之前,以减少 //2 引起的流水线停滞。

X = 1 ;//1

Z = 3 ; //3

Y = X + 1;//2

  1. CPU缓存的简略版

 

  1. 缓存一致性协议:MESI协议

  1. JMM内存模型

多线程下,共享变量的读写顺序是头等大事,内存模型就是多线程下对共享变量的一组读写规则。

共享变量值是否在线程间同步

代码可能的执行顺序

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值