自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 synchronized高并发卡成狗?90%人踩了这些坑!(附JDK17性能暴增350倍秘籍)

JVM自动合并相邻同步块(如循环内锁),减少锁获取/释放次数。读操作完全并发,吞吐量飙升。注意写饥饿和锁升级死锁问题。(业务隔离专属锁) - 保证同一业务线线程安全,避免无谓竞争。- 每次new新对象,锁完全失效!多线程并发执行,数据必乱。(若赋值给静态变量等导致逃逸,锁无法消除)。出当前方法栈帧(即不会被其他线程访问),则直接。JDK 24在锁消除上无颠覆性改进,本文结论。用了十几年,锁升级/消除的坑你踩过吗?(归功于逃逸分析算法大幅升级),偏向锁疯狂撤销,性能雪崩!高并发场景下,偏向锁的。

2025-06-07 18:01:22 293

原创 JVM堆区内存分布

JVM堆区内存又分为老年代old区,新生代eden区,新生代又分为S0与S1区,当对象刚创建时会首先被分配到新生代,当经过一次GC以后存活下来的对象有可能会被放入S区,如果S区存活的对象过多放不下时,JVM提供了一种担保机制会从老年代借点空间过来。当经过多次GC后存活下来的对象超过一定的次数后会被移入到老年代。新生代与老年代的比例是1:2,eden区与S0,S1的比例是8:1:1为什么要对...

2020-03-11 17:49:12 1302 1

原创 JVM运行时数据区详聊!!

运行时数据区Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。这些数据区域中的一些是在Java虚拟机启动时创建的,只有在Java虚拟机退出时才被销毁。其他数据区域是每个线程。每个线程数据区域是在线程退出时创建并销毁线程时创建的。01方法区在jvm官网中说,方法区只有一个,属于线程共享的一块内存区域,生命周期是跟虚拟机一样的。它存储每类结构,如运行时常量池、字段和方法数...

2020-02-06 15:06:03 204

原创 并发编程—ReentrantLock锁的竞争与释放(一)

1.ReentrantLock原理介绍ReentrantLock锁的获取也是基于AQS(AbstractQueuedSynchronizer)来实现的. AQS它是一个同步工具,它有两个功能一个是独占,独占就是说只有一个线程可以获取锁,也就是互斥。另外一个是共享.,共享就是可以有多个线程可以获取锁,像读写锁就是共享的。在AQS当中维护了一个双向链表,当线程发生竞争时,它会将线程封装成一个N...

2020-01-09 21:36:19 359

原创 Spring IOC源码之bean的注册过程

BeanDefition加载注册过程进入obtainFreshBeanFactory方法,这里面refreshBeanFactory方法会去创建beanFactory并加载bean进入obtainFreshBeanFactory方法,这里面refreshBeanFactory方法会去创建beanFactory并加载beanprotectedConfigurableLis...

2019-11-10 22:50:57 274

原创 Spring IOC源码之容器的体系结构

​本文是以spring5.0.2.RELEASE版本说明spring源码,以xml配置的方式来说明IOC容器原理,将bean信息注册到容器当中,再对容器中的bean进行实例化,本文主要介绍bean注册到容器的过程。在阅读spring源码之前建议先阅读下JSR规范,这样更容易理解源码.一,beanFactory体系结构BeanFactory是所有bean工厂的顶级接口,ListableB...

2019-11-07 21:47:07 243

原创 HashMap原理及put与get方法调用过程

HashMap的原理 HashMap的数据结构为数组+链表,以key,value的形式存值,通过调用put与get方法来存值与取值。 它内部维护了一个Entry数组,得到key的hashCode值将其移位按位与运算,然后再通过跟数组的长度-1作逻辑与运算得到一个index值来确定数据存储在Entry数组当中的位置,通过链表来解决hash冲突问题。当发生碰撞了,对象将会储存在链表的下一个节点中。

2017-07-05 20:58:26 14385 7

原创 Spring事务总是不生效?这12条自检清单帮你快速定位问题!

事务生效的关键在于:被Spring代理的对象调用方法时,才会触发事务逻辑。这依赖于AOP代理(JDK动态代理或CGLIB)(Spring Boot默认开启)、正确配置事务管理器、以及数据库引擎(如InnoDB)支持事务是基础前提。】的深度文章《Spring事务失效的12大陷阱详解》中,对以上每一条自检项对应的失效场景进行了全方位拆解。掌握这份清单,能帮你快速定位和解决90%以上的事务失效问题!经过大量实践和源码分析,我总结了Spring事务失效最常见的。注解,事务就是不生效?

2025-07-11 17:13:55 296

原创 Redisson分布式锁深度解析

在电商秒杀等并发场景中,分布式锁是避免超卖问题的关键。Redisson作为基于Redis的分布式锁实现,通过Lua脚本保证加锁的原子性,支持可重入锁和看门狗机制。加锁流程包括:检查锁是否存在、判断是否为当前线程持有、增加重入次数并设置过期时间。Redisson的分布式锁满足互斥性和可见性,确保在高并发场景下资源的安全访问。通过关注微信公众号「零壹工场」,可获取完整代码和流程图,进一步了解分布式锁的实现细节。

2025-05-21 22:21:02 172

原创 synchronized 锁升级底层原理:如何用 JOL 工具解析 Mark Word?(附实战代码)

在JDK1.6之前,synchronized直接使用重量级锁,导致单线程场景下系统开销较大。JDK1.6引入了锁升级机制,根据竞争情况智能调整锁状态,提升并发性能。锁升级过程包括无锁、偏向锁、轻量级锁和重量级锁四个阶段。偏向锁适用于单线程场景,轻量级锁适用于低竞争场景,重量级锁则用于高竞争场景。通过JOL工具可以观察锁状态的变化。锁升级机制在保证线程安全的同时,优化了性能,特别是在多线程竞争激烈时,重量级锁的使用避免了频繁的自旋操作,减少了系统开销。

2025-05-21 21:56:19 1168

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除