| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 偶然听说:追风少年他奶奶今天晚上二婚而我还在玩JVM -> 正文阅读 |
|
[Java知识库]偶然听说:追风少年他奶奶今天晚上二婚而我还在玩JVM |
续前文:分布式Id生成器之雪花算法 引入正题之高并发JVM对了,上面在同步机制解决方案中还提及到了死锁的产生与避免死锁的方案? JVMjvm概述? ? ?全称是java虚拟机,java源文件通过编译器生成.class的字节码文件,字节码文件通过jvm生成机器码,机器码与操作系统交互,正是因为这样,保证了java语言的可移植性高,官方有”write one,run anywhere“的说法,从java的角度来看看JVM的位置
?jvm内存区域jvm的内存区域从线程共享分为堆区和方法区(常量池),从线程私有分为本地方法栈,虚拟机栈,程序计数器 JMM(java memory model)java内存模型?定义程序中变量(线程共享)的访问规则,分为主内存和工作内存【可以从线程私有和线程共享去理解,参考下图】 另外来说主要的一点就是线程在运行期间必须遵循的规定
总结来说就是主内存和工作线程的访问问题,解决策略如下 实际上,不同线程之间在进行数据交互时,要完成经历如下8个步骤? ps:有图有真相? ?但这里需要注意的是JVM对long、double64位的误操作,所以引入了volatile关键字 Volatile解决可见性与重排序问题1.原子性某一条语句不可再拆分 上图框中的展示的juc包,箭头所指的是atomic下的所有类 上图测试的atomic原子性的结果 ?上图根据源码可知,atomic实现了CAS算法,保证变量的原子性操作 2.可见性某一个线程对volatile修饰的变量进行的任何操作,都会第一时间同步到其他线程中 3.重排序(不会影响单线程程序执行结果)某条语句内部的多个指令的执行顺序 通过对象的实例化可以理解重排序 双重检测机制下的饿汉单例模式理解指令重排ps:volatile通过”内存屏障“实现防止指令重排? 4.volatile非线程安全上图通过测试结果可知,volatile非线程安全? ?通过运行编译的class文件可知,白框中展示num++不是原子性操作
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:03:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |