- 博客(112)
- 资源 (8)
- 收藏
- 关注
原创 揭秘 Mark Word 的存储结构
从上述代码中可以看到,在main()方法中定义了MarkWordExample对象实例,并且该对象含两个成员变量:id和name。在默认打印的对象内存布局信息中,Klass Pointer被压缩成4字节,如果不希望开启压缩指针功能,加一个jvm参数 --XX:UseCompressedOops。lock = new Object() 对象实例时,这个1ock实例最终的存储结构就对应下面这个的模型。一个Java对象被初始化之后会存储在堆内存中,那么这个对象在堆内存中存储了哪些信。对象在内存中的存储结构。
2024-10-24 10:39:40
354
原创 volatile 系列之指令重排序导致的可见性问题
什么是指令重排序呢?为了更加直观地理解,老司机还是通过一个案例来说明as-if-serial 语义
2023-12-13 21:16:05
167
原创 Java 中的 synchronized 同步锁
导致线程安全问题的根本原因在于,存在多个线程同时操作一个共享资源,要想解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在同一时刻,只允许一个线程执行某个方法或代码块。synchronized同步锁具有互斥性,这相当于线程由并行执行变成串行执行,保证了线程的安全性,但是损失了性能。下面我们先来看一下synchronized的使用方法。
2023-10-30 02:30:00
389
原创 AQS 关于锁与队列的关系
AQS,队列与锁的关系,解决CAS恶性空白旋的有效方式之一是以空间换时间,较为常见的方案有两种:分散操作热点和使用队列削峰。JUC并发包使用的是队列削峰的方案解决CAS 的性能问题,并提供了一个基于双向队列的削峰基类、抽象基础类AbstractQueuedSynchronizer(抽象同步器类,简称为AQS)。
2023-10-29 21:38:32
160
原创 synchronized 的锁类型
之前的文章有讲过对同步锁的理解,实现同步锁的方式无非是多个线程抢占一个互斥变量,如果抢占成功则表示获得了锁,而没有获得锁的线程则阻塞等待,直到获得锁的线程释放锁如图所示,在Mark Word中,我们发现锁的类型有偏向锁、轻量级锁、重量级锁,那么其实,在JDK 1.6之前,synchronized只提供了重量级锁的机制,重量级锁的本质就是我们前面对于锁的认知,也就是没有获得锁的线程会通过park方法阻塞,接着被获得锁的线程唤醒后再次抢占锁,直到抢占成功。
2023-10-28 22:57:00
686
原创 CAS 机制的实现原理分析
在 synchronized 中很多地方都用到了CAS机制,它的叫法有很多,比如CompareAndSwap、CompareAndExchange、CompareAndSet,它是一个能够进行比较和替换的方法,这个方法能够在多线程环境下保证对一个共享变量进行修改时的原子性不变。
2023-10-27 22:39:51
422
原创 volatile 系列之实现原理
揭密volatile 实现原理,我们通过volatile解决了由于编译器的指令重排序导致的可见性问题,这意味着volatile 底层用到了内存屏障
2023-10-27 02:00:00
328
原创 CompletableFuture 实战
以一个商品查询为例,在微服务架构中,一个商品信息查询会涉及商品基本信息查询、商品评论查询、商品库存查询,每个查询都涉及不同的微服务的调用,如果使用异步编程的方式,应该如何实现呢?
2023-10-26 23:21:06
871
原创 锁升级的实现流程
当一个线程访问增加了synchronized关键字的代码块时,如果偏向锁是开启状态,则先尝试通过偏向锁来获得锁资源,这个过程仅仅通过CAS来完成。如果当前已经有其他线程获得了偏向锁,那么抢占锁资源的线程由于无法获得锁,所以会尝试升级到轻量级锁来进行锁资源抢占,轻量级锁就是通过多次CAS(也就是自旋锁)来完成的
2023-10-26 10:18:32
248
原创 Synchronized 关键字
在Java中,线程同步使用最多的方法是使用synchronized关键字。每个Java对象都隐含有一把锁,这里称为Java内置锁(或者对象锁、隐式锁)。使用synchronized(syncObject)调用相当于获取 syncObject 的内置锁,所以可以使用内置锁对临界区代码段进行排他性保护
2023-10-25 12:20:32
127
原创 技术转管理,先来试试管理好项目
想要技术转型管理,首先从转变思维方式开始,从技术思维到管理思维,从关注细节到关注整体。然后去改变习惯,控制自己想写代码的冲动,多去从其他角度想办法。要管理好一个项目,关键是要管理好项目中的人和事。对客户要管理好期望,对项目成员则通过合理的流程规范更好的一起协作;对于项目中事的管理就是对软件开发过程的管理,选择好开发模式很重要,然后就是制定好计划,按照计划推进,过程中不断的调整,并且管理好项目中的风险。
2023-05-10 15:59:03
872
原创 Innodb事务原理
1、Innodb收到一个update语句,会根据数据所在的页,会把该页缓存在Buffer pool中2、执行update语句,修改Buffer Pool的数据,内存的中的数据3、针对update语句生成RedoLog,并存入LogBuffer中4、继续生成undolog日志,这个用于事务回滚5、如果事务提交,那么则把Redolog对象进行持久化,后续其他机制将Buffer Pool所修改的数据持久化磁盘中6、如果事务回滚,则利用undolog日志进行回滚
2022-10-02 11:15:53
248
原创 微服务网关 Spring Cloud Gateway
API网关的作用网关的本质及技术选型Spring Cloud Gateway 网关实战Spring Cloud Gateway 原理分析
2022-07-25 15:35:09
326
原创 Spring Boot 自动装配的原理
在Spring Boot中,不得不说的一个点是自动装配,它是Starter的基础,也是Spring Boot的核心,那么什么叫自动装配呢?或者说什么叫装配呢?
2022-04-22 15:55:56
1716
原创 Spring Ioc/DI 控制反转和依赖注入
Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入。如何理解这两个概念呢?
2022-03-23 17:33:22
988
原创 SpringBoot SpringCloud MybatisPlus框架动态数据源(配置多个DB数据源)
分库分表的不要使用以下方法这里是普通的多数据源配置本方法是nacos的配置1 依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.4.1</version></dependency>...
2021-10-11 15:25:17
608
电商公司的SOP文档(代码审查+复盘+工作量评估+胜利会+故障处理+信息同步+脑爆会+任务分配+跨部门项目支持+故障告警响应)
2022-03-23
高并发高可用mysql优化
2019-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人