![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 并发专题
文章平均质量分 90
Java 并发专题
莫言静好、
这个作者很懒,什么都没留下…
展开
-
2021-06-01 深入分析锁的基础知识
一 对象在内存中的布局? 创建一个Object对象占用多少内存?1.1 对象在内存中的布局?SHAPE \* MERGEFORMAT 我们知道,对象是放在堆中的,那么对象是怎么构成的?只包括实例数据吗?堆中的对象主要由三部分组成:对象头(object header)、实例数据(instance data)和对齐填充(padding)。SHAPE \* MERGEFORMAT SHAPE \* MERGEFORMAT 对象头:主要由三部分组成,包括m...原创 2021-06-01 08:49:09 · 206 阅读 · 0 评论 -
2021-06-01 深入分析偏向锁、轻量级锁和重量级锁
一 重量级锁1.1 什么是重量级锁?重量级是怎么体现的?第一:执行同步代码块的时候或者执行同步方法的时候,需要为锁对象创建监视器,监视器用于关联锁对象、以及锁对象的原始头信息、重入次数、竞争失败队列、竞争队列和阻塞队列等信息,所以保存的东西占用的内存量很多,尤其是线程并发量大的时候。第二:另外线程竞争失败的队列需要进入队列挂起或者线程阻塞也需要挂起,当挂起的时间到期又需要唤醒线程,等待和唤醒是属于系统调用,会涉及到CPU在用户态和内核态切换,线程太多就会频繁切换。第三:内核线程需要操作系统进原创 2021-06-01 08:28:21 · 612 阅读 · 1 评论 -
2021-06-01 深入分析锁升级流程的基础
一 对象在内存中的布局? 创建一个Object对象占用多少内存?1.1 对象在内存中的布局?我们知道,对象是放在堆中的,那么对象是怎么构成的?只包括实例数据吗?堆中的对象主要由三部分组成:对象头(object header)、实例数据(instance data)和对齐填充(padding)。对象头:主要由三部分组成,包括mark word(关于hashcode、锁或者GC分代信息的记录), class pointer(指向方法区class的指针)、数组长度。其...原创 2021-06-01 08:00:15 · 301 阅读 · 0 评论 -
2021-04-13 Linux I/O模型
一 什么是同步,什么是异步?同步指的是发起I/O请求后,必须等待I/O响应,从内核缓冲区获取到数据,程序才能继续往下执行异步指的是发起I/O请求后,无需等待I/O响应,程序继续往下执行,如果内核缓冲区数据准备好了则通知用户进程或者执行注册的回调函数二 什么是阻塞,什么是非阻塞?阻塞指的是I/O请求时,内核缓冲区没有数据,则需要阻塞等待数据准备好。注意这里也并不是一直阻塞,CPU时间分片到了,则会把请求放入到一个等待队列,然后去执行其他线程了,等待数据返回,触发中断,然后中断处理程序会将该线程移到运行原创 2021-04-13 18:35:39 · 129 阅读 · 0 评论 -
2021-04-04 CPU缓存一致性 MESI协议
一 CPU以及缓存和高速缓存结构1.1 CPU结构我们知道CPU主要功能,一是控制,一是运算。主要包括寄存器、控制单元、运算单元和中断系统,主要架构如下:控制单元:主要负责分析和解释指令算数逻辑单元:也就是CPU的运算或者执行单元,负责计算寄存器:有多种类型,包括地址寄存器、数据寄存器和控制寄存器等等,数据寄存器:保存数据和操作数的寄存器;地址寄存器:保存地址;指令寄存器:存放指令的寄存器1.2 寄存器和高速缓存和写缓冲区比较相同点:都可以是CPU这边的硬件,其中高速缓存可以在处理器和MMU原创 2021-04-04 09:03:21 · 656 阅读 · 0 评论