![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 94
bright_qian
这个作者很懒,什么都没留下…
展开
-
并发编程锁原理总结
ReentrantLockReentrantLock主要利用CAS+AQS(AbstractQueuedSynchronizer)队列来实现。它支持公平锁和非公平锁,两者的实现类似。CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI调用CPU底层原创 2021-05-04 16:00:25 · 301 阅读 · 0 评论 -
synchronized原理和锁膨胀过程
对象头HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,这部分数据的长度在32位和64位的虚拟机(暂 不考虑开启压缩指针的场景)中分别为32个和64个Bits,官方称它为“Mark Wor原创 2021-04-26 22:51:20 · 265 阅读 · 0 评论 -
内存溢出和内存泄漏的区别
内存溢出(out of memory)程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存。JAVA堆溢出异常测试创建的OOMObject对象太多,在进行垃圾回收之前对象数量达到了最大堆的容量限制。/** * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * * @author bright */...原创 2020-03-21 14:26:06 · 274 阅读 · 0 评论 -
深入理解JVM-CAS原子操作
前言在学习JVM对象创建的时候,碰到一个问题,对象创建在虚拟机中时非常频繁的行为,即使仅仅修改一个指针所指向的位置,在并发情况下也并不是线程安全的,可能出现正在给A对象分配内存的时候,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的情况,解决这个问题,其中又一个方案,就是使用CAS配上失败重试的方式保证更新操作的原子性。下面我们一起学习以下CAS的原理。乐观锁与悲观锁我们都知道,...原创 2020-03-18 22:20:21 · 678 阅读 · 0 评论 -
深入理解JVM-自动内存管理
自动内存管理前言Java内存区域与内存溢出异常运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存OutOfMemoryError异常前言从Java的第一个版本诞生到现在已经有二十余年的时间,白驹过隙,沧海桑田,转眼已过了四分之一个世纪,在图1-3所示的时间线里,我们看到JDK的版本已经发展JDK13。这二十多年里诞生过无数与Java相关的产品、技术与标准...原创 2020-03-18 21:47:08 · 677 阅读 · 0 评论