摘要: Java 虚拟机(JVM)主要分为以下几个区域:程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间。其中除了程序计数器和本地方法栈比较小而且不容易出现内存溢出,其它区域都可能发生内存溢出的情况。 以下是各个区域可能出现内存溢出的场景: 1. 程序计数器 程序计数器是用于记录当前线程正在执行的 JV 阅读全文
posted @ 2024-03-18 18:59 初仰 阅读(11) 评论(0) 推荐(0)
摘要: JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化。加载加载是类加载过程中的一个阶段, 这个阶段会在内存中生成一个代表这个类 java.lang.Class对象, 作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 阅读全文
posted @ 2024-03-18 18:54 初仰 阅读(6) 评论(0) 推荐(0)
摘要: 保证 i++ 线程安全的手段是加锁,可以通过 synchronized 或 Lock 加锁来保证 i++ 的线程安全。 阅读全文
posted @ 2024-03-18 18:51 初仰 阅读(88) 评论(0) 推荐(0)
摘要: 锁升级的过程指的是 synchronized 锁升级的过程,synchronized 锁升级机制也叫做锁膨胀机制,此机制诞生于 JDK 6 中。 在 Java 6 及之前的版本中,synchronized 的实现主要依赖于操作系统的 mutex 锁(重量级锁),而在 Java 6 及之后的版本中,J 阅读全文
posted @ 2024-03-18 18:51 初仰 阅读(39) 评论(0) 推荐(0)
摘要: 线程池的创建方法总共有 7 种,但总体来说可分为 2 类: 通过 ThreadPoolExecutor 创建的线程池;通过 Executors 创建的线程池。 线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创 阅读全文
posted @ 2024-03-18 18:49 初仰 阅读(2) 评论(0) 推荐(0)
摘要: MySQL 索引根据不同的维度可以分为不同类型,比如以下这些: 根据数据结构分类可分为:B+ tree 索引、Hash 索引、Full-Text 索引;根据物理存储分类可分为:聚簇索引、二级索引(辅助索引、非聚簇索引);根据字段特性分类可分为:主键索引、普通索引、唯一索引、前缀索引;根据字段个数分类 阅读全文
posted @ 2024-03-18 18:46 初仰 阅读(40) 评论(0) 推荐(0)
摘要: Redis 运行比较快的原因有以下几个: 内存存储:Redis 主要是将数据存储在内存中,而不是磁盘上。相比于传统的磁盘存储数据库系统,内存访问速度更快,因此可以实现更低的延迟和更高的吞吐量;单线程模型:Redis 采用单线程模型来处理客户端的请求。这意味着不会发生多线程之间的锁竞争和上下文切换,避 阅读全文
posted @ 2024-03-18 18:45 初仰 阅读(13) 评论(0) 推荐(0)
摘要: @Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有以下不同: 来源不同:@Autowired 和 @Resource 来自不同的“父类”,其中 @Autowired 是 Sp 阅读全文
posted @ 2024-03-18 18:44 初仰 阅读(4) 评论(0) 推荐(0)
摘要: 一、Spring 事务的实现方式和实现原理Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring 是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过binlog 或者 redo log 实现的。 二、Spring 的事务传播行为Spring 事务的传播行为说的 阅读全文
posted @ 2024-03-18 18:35 初仰 阅读(17) 评论(0) 推荐(0)
摘要: @Transactional 应用在非 public 修饰的方法上,不支持回滚;@Transactional 注解属性 propagation 设置错误;@Transactional 注解属性 rollbackFor 设置错误;在同一个类中方法调用,导致 @Transactional 失效;异常被你 阅读全文
posted @ 2024-03-18 18:34 初仰 阅读(4) 评论(0) 推荐(0)
摘要: readOnly该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true) rollbackFor该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚 阅读全文
posted @ 2024-03-18 18:27 初仰 阅读(8) 评论(0) 推荐(0)