摘要:
标记 — 清除算法(Mark Sweep) 最基本的垃圾收集算法,从它的名字就可以看得出来,算法分为“标记”和“清除”两个阶段:首先标记处所有需要回收的对象,在标记完成后统一回收被标记的对象。 标记清除算法主要不足有两个方面: 效率低 标记和清除两个阶段的效率都不够高 空间碎片问题 标记清除之后会产 阅读全文
摘要:
简介 StampedLock 是JDK1.8 开始提供的一种锁, 是对之前介绍的读写锁 ReentrantReadWriteLock 的功能增强。StampedLock 有三种模式:Writing(读)、Reading(写)、Optimistic Reading(乐观度),StampedLock 的 阅读全文
摘要:
简介 ReentrantReadWriteLock 从字面意思可以看出,是和重入、读写有关系的锁,实际上 ReentrantReadWriteLock 确实也是支持可重入的读写锁,并且支持公平和非公平获取锁两种模式。 为什么会出现读写锁? 普通锁可以保证共享数据在同一时刻只被一个线程访问,就算有多个 阅读全文
摘要:
简介 条件锁,指在获得锁之后,还需要达成某些条件后,才能继续执行的锁。且必须配合Lock一起使用,也就是说必须获得锁之后才可以调用condition.await()方法 源码分析 ReentrantLock 的条件锁使用的 AbstractQueuedSynchronizer 中的Condition 阅读全文
摘要:
简介 ReentrantLock 是JDK 1.5开始提供的一种可重入的互斥锁,并且构造方法支持公平性参数。 源码分析 类结构体系 ReentrantLock实现了Lock接口: public class ReentrantLock implements Lock, java.io.Serializ 阅读全文
摘要:
简介 AQS 全称是 AbstractQueuedSynchronizer,位于java.util.concurrent.locks 包下面,AQS 提供了一个基于FIFO的队列和维护了一个状态state变量赖表示状态,可以作为构建锁或者其他相关同步装置的基础框架。AQS 支持两种模式:共享模式 和 阅读全文
摘要:
简介 synchronized关键字是Java里面最基本的同步手段,它经过编译之后,会在同步块的前后分别生成 monitorenter和 monitorexit字节码指令,这两个字节码指令都需要一个引用类型的参数来指明要锁定和解锁的对象;而直接使用 synchronized 关键字锁定方法时,生成的 阅读全文
摘要:
高效并发是 JDK1.5 到JDK1.6 的一个重要改进,虚拟机在这个版本上实现了各种锁优化技术,比如:适应性自旋锁、锁消除、锁粗化、轻量级锁、偏向锁等,这些技术都是为了在线程之间更高效的共享数据,以及解决竞争问题。 自旋锁与自适应锁 同步(加锁)对性能最大的影响就是实现阻塞,挂起线程和恢复线程都需 阅读全文
摘要:
Unsafe是什么 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等。不能被普通用户直接使用。 基本介绍 如下Unsafe源码所示,Unsafe类为一单例实现,提供静态方法getUnsafe获取Unsafe实例, 阅读全文
摘要:
如何使用 SpringBoot 2.3.0新特性优雅停机 阅读全文
摘要:
一: 新建一个SpringBoot-web 项目 略 在pom.xml 引入Docker maven plugin <build> <plugins> ... <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> < 阅读全文
摘要:
安装 客户端和服务端下载地址,打开网址,根据自己的操作系统下载对应的版本,window用户服务端一般安装的是VisualSVN,客户端安装TortoiseSVN,在实际工作中,我们一般只需要安装TortoiseSVN,对应的IDE中安装好svn插件就可以了。 SVN Checkout 进入公司的第一 阅读全文
摘要:
Maven创建项目 略…具体过程可参考用Maven创建第一个web项目 配置Spring MVC 导入Spring MVC 需要的包在pom.xml 文件下加入: <!-- spring mvc begin --> <dependency> <groupId>org.springframework< 阅读全文
摘要:
事务的目的就是要保证数据的高度完整性和一致性。 在实际的项目中,大多都是使用注解的方式来实现事物,这里也就简单记录下使用@Transactional方法和注意事项. 在xml中添加配置 1234567 <!-- TransactionManager --><bean id="transactionM 阅读全文