摘要:
Warpper 条件构造器定级接口 我们在使用过程,就是去new QueryWarpper<T>()与new UpdateWarpper<T>(),完成相对复杂的sql拼接。 使用方式 1. 使用Mapper Warpper接口的作用是提供一定逻辑去拼接sql语句。通过Dao层去执行sql语句。 代 阅读全文 »
发表于 2023-12-18 17:09阅读:163评论:0推荐:0
发表于 2023-11-18 14:54阅读:338评论:0推荐:1
摘要:
谈谈 AQS AQS(AbstractQueuedSynchronizer)是JUC包下的一个抽象类。虽然是抽象类,但没有抽象方法,即便子类集成,也无法直接使用锁功能。AQS中关于锁的判断TryAcquire与TryRelease方法,默认都是报错,需要子类集成后进行重写,才能使用锁功能。 JUC包 阅读全文 »
发表于 2023-11-02 16:46阅读:49评论:0推荐:0
摘要:
Redis分布式锁最简单的实现 分布式锁使用场景: 客户端1 申请加锁,加锁成功 客户端2 申请加锁,因为它后到达,加锁失败 客户端1 释放锁 客户端2 申请加锁,并加锁成功 SETNX 想要实现分布式锁,必须要求Redis有「互斥」的能力,这里我们就要提到SETNX 命令,这个命令表示SET if 阅读全文 »
发表于 2023-10-24 17:51阅读:9评论:0推荐:0
摘要:
日常所说的“核心线程”、“非核心线程”是一个虚拟的概念,是为了方便描述而虚拟出来的概念 在代码中并没有标记哪些线程为“核心线程”或者“非核心线程”。所有线程都是一样的。 为什么使用线程池 减少线程的创建与销毁 减少cpu的资源切换。如果线程很多的情况下,cpu切换会很大消耗资源。线程池的存在可以有效 阅读全文 »
发表于 2023-10-20 17:35阅读:311评论:0推荐:0
摘要:
保存时自动保存代码 保存时自动删除无关引用 打开settings.json后 加入 "editor.codeActionsOnSave": { "source.organizeImports": true }, 保存时自动删除缓存 按下ctrl + shift + p,出现以下视图,并输入 Clea 阅读全文 »
发表于 2023-10-13 17:01阅读:7评论:0推荐:0
发表于 2023-10-13 14:59阅读:14评论:0推荐:0
发表于 2023-10-13 11:48阅读:16评论:0推荐:0
摘要:
系统运行中,对象创建过程 依据逃逸分析,判断是否能栈上分配? 如果不存在逃逸,该对象就可以通过标量替换分解成成员标量分配在栈内存中,和方法的生命周期一致,随着栈帧出栈时销毁,减少了 GC 压力,提高了应用程序性能。 否则,继续下一步。 判断是否大对象? 如果是,直接分配到堆上 Old Generat 阅读全文 »
摘要:
Java运行时数据区域 众所周知,Java 虚拟机有自动内存管理机制,如果出现内存泄漏和溢出方面的问题,排查错误就必须要了解虚拟机是怎样使用内存的。 包含:程序计数器(PC)、堆、本地方法栈、虚拟机栈、元空间 下图是 JDK8 之后的 JVM 内存布局。 程序计数器(PC) 内存中一块较小的空间,每 阅读全文 »
摘要:
内存模型与内存区域 很多时候,二者会混淆,所以咱们先做区分:内存模型与内存区域 内存区域是指JVM运行时将数据分区域存储,强调的是对空间的分配 内存模型(JMM)是定义了线程和主内存之间的抽象关系。即定义了 JVM 在计算机内存中的工作方式 内存模型 抽象关系定义 线程之间的共享区间为主内存,也就是 阅读全文 »
发表于 2023-10-10 17:35阅读:12评论:0推荐:0
发表于 2023-10-10 11:12阅读:126评论:0推荐:0
摘要:
举例说明 以 AtomicInteger 原子整型类为例,一起来分析下 CAS 底层实现机制。 atomicData.incrementAndGet() 源码如下所示: // 自增方法 public final int getAndIncrement() { for (;;) { int curre 阅读全文 »
摘要:
锁升级 锁升级,是JDK1.6版本中对于synchronized的优化。调查发现一般情况下锁的使用都是为了处理一些极端情况,但多时间,并不会出现并发争强的情况,直接是有synchronized比较重,会影响系统性能。 升级步骤: 无锁/匿名偏向锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 升级特 阅读全文 »