🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了volatile关键字的底层实现八股文的方方面面。🌈⭕🔥
【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】
🌈序言:
JAVA八股文就是最最基础之事,此关不过,啥都没有。今日得《黑马程序员之八股》良品辅助,代码随想录之优品引导,《JAVA核心技术》之极品传教,应按此三者学之习之,时时复习,长此以往必能穿魂入脉,习得大功。
应该四处查阅浏览八股技术博客之,不应固守一隅,应集百家之所长而习得内功。
对于一个强烈想完全掌握JAVA的技术宅来说,JAVA的XXX万万不能放过,这些基础的概念例程都值得细细体味的,千万别觉得都是文字,浪费时间,记住——别违背科学发展的客观规律。别一味地赶进度以满足自己学的都么快的虚荣心,自欺欺人,要老老实实的走好每一步。
每一次复习八股文都是复习JAVA基础的绝佳机会,切借此机会融会贯通之。
🌈禁止指令重排序:
🌈CPU 的乱序执行
如果指令1在指令2前面,但是CPU在执行指令1时要去内存中读取数据,耗时慢(内存慢了100倍)。这期间,CPU就直接先将指令2执行了(但是有一定的条件限制,比如指令2不能依赖于指令1)
看上去就像是CPU先将指令2执行了。
作用:提效率,而非乱。
JVM级别实现🔥
🌈JVM规范指令不能重排序的8种情况
又称为happened-before原则。注意jvm只是规范,需要我们去源码中实现之,里面就有一个volatile关键字。这就是我们的主角!
🌈volatile关键字的原理
在可能发生指令重排序的指令之间插入一堵墙即可。主页属于叫——“内存屏障”。
凡是实现了JVM的虚拟机,就必须实现四种逻辑上的屏障,如下:
凡是用volatile修饰的内存变量,在写(store)的时候,该指令的前面后面都加屏障。读(load)亦然。
汇编级别实现🔥
🌈内存有序性指令
读屏障、写屏障、全屏障
CPU级别实现🔥
🌈LOCK总线锁
volatile的底层实现指令就是它。
简单粗暴,不仅解决了指令从排序,还解决了线程可见性。
这是一种更6b的实现指令,原子指令LOCK——>FULL BARRIER
一个CPU(线程)执行指令去读数据的时候,直接将系统总线给锁住,其他指令就不能执行,只能等待该CPU将该指令读取回来,将LOCK释放,其他CPU核心(其他线程)才能访问之。示意图如下(最左边又徒手花了一个CPU)。
说白了就是上厕所,里面只有一个坑位,上完了,别人才能上。
JIT程序优化
“
java
” 表示运行 Java 程序。“
-XX:+UnlockDiagnosticVMOptions
” 用于解锁诊断虚拟机选项。“
-XX:+PrintAssembly
” 表示启用打印汇编代码的功能。“
T
” 可能是您要运行的 Java 类的名称或其他相关参数。“
> 1.txt
” 表示将命令执行过程中输出的内容重定向到名为“1.txt”的文件中,以便后续查看和分析。
使用上面这行代码会打印出汇编,很长,但其中就有m()、n()方法的底层实现,就会看到又LOCK指令,禁止JIT优化。
🌈技术面要广:
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏推荐
🌈🌈计算机科学入门系列 关注走一波💕💕
🌈🌈CSAPP深入理解计算机原理 关注走一波💕💕
🌈🌈微服务项目之黑马头条 关注走一波💕💕
🌈🌈redis深度项目之黑马点评 关注走一波💕💕
🌈🌈JAVA面试八股文系列专栏 关注走一波💕💕
🌈🌈JAVA基础试题集精讲 关注走一波💕💕
🌈🌈代码随想录精讲200题 关注走一波💕💕
总栏
🌈🌈JAVA基础要夯牢 关注走一波💕💕
🌈🌈JAVA后端技术栈 关注走一波💕💕
🌈🌈JAVA面试八股文 关注走一波💕💕
🌈🌈JAVA项目(含源码深度剖析) 关注走一波💕💕
🌈🌈计算机四件套 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总 关注走一波💕💕
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!