- 博客(50)
- 收藏
- 关注
原创 地基JVM中的强引用、软引用、弱引用、虚引用的区别
在面试中,当被问及JVM中的强引用、软引用、弱引用、虚引用的区别,并要求举例说明时,可以按照以下方式作答:软引用(Soft Reference)定义:软引用是类的实例,它比强引用更弱一些。如果一个对象只存在软引用,并且JVM判定系统内存不足时,垃圾回收器会回收这个对象。特点:软引用对象的生命周期由JVM的内存状况决定。在内存充足时,软引用对象可能会一直存在;但在内存不足时,它们会被回收以释放内存。应用场景:软引用常用于实现缓存系统,能够在内存和性能之间找到一个平衡点。示例:弱引用(Wea
2025-02-08 10:38:36
531
原创 简识YGC的Survivor中的数据进入到OGC时机
YGC:新生代回收(Minor GC/Young GC);OGC:老年代回收(Major GC/Old GC);新生代Survivor中的数据在满足一定条件时会进入到老年代。这些条件及其判断方法主要基于JVM的垃圾回收机制和对象存活的情况。
2025-02-06 16:27:21
360
原创 补小识JVM中的分代收集理论
这种划分是为了更好地管理堆内存中的对象,并方便垃圾收集算法的执行。在分代收集理论中,还有两个重要的概念:对象的年龄和晋升。基于上述假说,当前流行的垃圾收集器都遵循以下设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄(即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。总的来说,JVM的分代收集理论通过划分不同的内存区域和使用不同的垃圾收集算法来优化内存管理效率。此外,一些较大的对象(需要分配连续的内存空间)也可能直接进入老年代,以避免在新生代中频繁复制和移动。
2025-02-06 15:47:46
449
原创 小识Java死锁是否会造成CPU100%?
死锁或者大量的死锁不一定会直接导致CPU占用率达到100%。以下是详细分析:CPU占用率达到100%通常是由以下原因造成的:虽然死锁本身不一定会导致CPU占用率达到100%,但死锁对系统性能和并发能力的影响是不可忽视的。死锁会阻塞线程,降低系统响应速度,甚至可能导致系统崩溃。因此,在开发过程中应尽量避免死锁的发生,并通过良好的设计和并发控制策略来预防和处理死锁问题。综上所述,死锁或者大量的死锁不一定会造成CPU占用率达到100%,但它们确实会对系统性能和并发能力产生负面影响。在开发过程中应予以重视并采取相应
2025-01-25 19:30:33
252
原创 小识JVM堆内存管理的优化机制TLAB
TLAB是JVM堆内存管理的一种优化机制,用于减少多线程环境下对象分配的竞争,提高分配对象的效率。它为每个线程分配一块独立的小堆空间,专门用于分配新对象,从而避免线程间的锁争用。
2025-01-24 16:55:43
704
原创 简识JVM中并发垃圾回收器和多线程并行垃圾回收器的区别
性能影响:多线程并行垃圾回收器通过减少垃圾收集的总暂停时间来提高吞吐量,但可能会导致较长的单次停顿。而并发垃圾回收器则通过减少应用程序的停顿时间来保持更好的响应性,但可能会占用一部分CPU资源来执行垃圾收集工作。复杂度:并发垃圾回收器的实现通常比多线程并行垃圾回收器更复杂,因为它们需要处理垃圾收集线程与用户线程之间的并发执行问题。适用场景:选择哪种垃圾回收器取决于应用程序的具体需求。如果对吞吐量有高要求且可以容忍较长的停顿时间,则多线程并行垃圾回收器是一个不错的选择。
2025-01-24 11:31:23
638
原创 简识JVM的栈帧优化共享技术
栈帧优化共享技术是JVM中一种重要的优化手段,它通过方法内联和栈帧重叠等方式,减少了方法调用的开销和内存占用,提高了程序的运行效率。然而,这种优化技术也受到多种条件的限制,需要在具体应用场景中权衡利弊,以达到最佳的优化效果。
2025-01-22 10:42:25
645
1
原创 简识JVM栈中的程序计数器
定义:程序计数器是一块较小的内存区域,每个线程在创建时都会分配一个独立的程序计数器,因此它是线程私有的。作用:程序计数器的主要作用是存储当前线程正在执行的Java方法的字节码指令地址。它是一个指示器,指向方法区中该线程正在执行的方法的字节码地址,确保了线程能够准确地执行下一条指令。
2025-01-21 12:05:21
545
原创 简识JVM栈帧中的局部变量表
前记:在JVM(Java虚拟机)中,栈帧(Stack Frame)是方法执行时的数据结构,用于存储局部变量、操作数栈、方法返回地址等信息。栈帧(Stack Frame)是JVM方法执行时所使用的数据结构,而局部变量表(Local Variables Table)则是栈帧中的一个重要组成部分。
2025-01-21 11:22:44
592
原创 简识JVM栈帧中的操作数栈
操作数栈是一个后进先出(LIFO)栈,用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈和出栈操作。
2025-01-21 11:19:44
465
原创 简识JVM私有内存区域栈、数据结构
在JVM中,私有内存区域栈主要由虚拟机栈和本地方法栈组成。这两个栈都是线程私有的,并且它们的数据结构都是栈结构。虚拟机栈用于描述Java方法的执行过程,而本地方法栈则用于描述Native方法的执行过程。栈帧是这两个栈中存储数据和过程结果的基本单位,它包含了局部变量表、操作数栈、动态链接、方法返回地址等信息。需要注意的是,虽然JVM规范对虚拟机栈和本地方法栈的数据结构进行了描述,但具体的实现可能会因JVM的不同而有所差异。因此,在实际应用中,开发者需要了解并遵循所使用的JVM的具体实现和限制。
2025-01-21 11:15:09
554
原创 简识栈结构的后进先出(LIFO)
栈是一种只允许在一端进行插入和删除操作的线性表。这一端通常称为栈顶(Top),相对的另一端称为栈底(Bottom)。栈的基本操作包括压栈(Push)和弹栈(Pop),分别用于在栈顶插入元素和删除元素。栈结构是一种重要的线性数据结构,其后进先出的特性使得它在计算机科学和编程中有广泛的应用。通过理解栈结构的基本定义和操作原则,我们可以更好地利用它来解决实际问题。通过这个例子,我们可以看到栈结构的后进先出原则是如何工作的。
2025-01-21 11:13:06
869
原创 简识Redis 持久化相关的 “Everysec“ 策略
另外,Redis 还提供了 "No" 策略(由操作系统决定何时同步),但这种策略在数据安全性方面存在较大的风险,通常不建议在生产环境中使用。在 Redis 的持久化机制中,"Everysec"(或写作 "everysec")指的是 AOF(Append Only File)持久化的一种写回策略。综上所述,"Everysec" 是 Redis AOF 持久化中的一种写回策略,它每秒将缓冲区中的写命令同步到磁盘上,以在数据安全性和性能之间取得平衡。
2025-01-20 18:06:51
273
原创 简识Redis中的fork操作
在Redis的上下文中,fork是一个关键的操作,它涉及到Redis持久化机制中的一个重要方面:RDB(Redis Database)快照持久化。fork,用于创建一个与当前进程几乎完全相同的进程,称为子进程。在Redis中,这个操作通常用于创建一个子进程来执行RDB快照的生成。
2025-01-20 17:35:55
528
原创 小例MySQL主从复制配置
(前记:大家带着挑剔的眼光,多多批判和指正!🙏)MySQL主从复制的配置涉及对主库(Master)和从库(Slave)的相应设置。以下是一个详细的配置过程,包括配置文件示例和必要的命令。
2025-01-18 18:34:06
773
原创 小例Java结合Spring框架和MyBatis ORM来实现 ERP项目中实现读写分离
创建DataSource@Aspect@Component你还需要实现和枚举类来存储和获取当前线程的数据源类型。
2025-01-18 17:07:44
303
原创 小小识MySQL存储引擎中XA和Savepoints
XA:用于分布式事务处理,确保在多个资源上的事务能够作为一个单一的工作单元提交或回滚。Savepoints:用于在单个事务内部创建标记点,以便可以回滚到这些特定的标记点,提供细粒度的事务控制。这两个特性在不同的应用场景中发挥着重要作用,帮助开发者实现更复杂和可靠的事务处理逻辑。尾记:具体的使用还未知。后续有时间会补上。
2025-01-17 10:47:28
260
原创 小识MySQL中的OLTP和OLAP
前记:大家带着挑剔的眼光,多多批判和指正!🙏MySQL中的OLTP和OLAP是两种不同的数据库操作模式,它们各自针对不同的应用场景和需求。
2025-01-16 20:49:28
345
原创 简聊数据库的覆盖索引
覆盖索引(Covering Index)是数据库优化中的一种重要技术,它指的是索引本身包含了查询所需的所有字段数据,从而无需再回表查询的数据访问方式。这种优化能够显著提升查询性能,因为它减少了磁盘I/O操作,提升了查询效率。
2025-01-15 10:30:42
283
原创 简识SQL查询语句中的 force index的用法
这条SQL语句包含了一些特定的指令和条件,下面我将逐一解释其含义以及MySQL服务器如何执行这条语句,特别是关于锁的作用。
2025-01-15 10:07:25
240
原创 小识MySQL中一般索引加不同类型锁缘由
在MySQL中,当使用范围查询(如)并结合语句时,InnoDB存储引擎会根据查询条件和当前的数据分布情况来决定加什么锁以及每个区间加什么锁。
2025-01-15 09:54:22
494
原创 简识MySQL存储引擎innodb的lock_mode锁模式
在实际使用中,InnoDB的锁机制相当复杂,并且会根据具体的SQL查询、事务隔离级别(如READ COMMITTED或REPEATABLE READ)以及InnoDB的内部算法进行动态调整。原先的提问: 在innodb中, lock_mode X 、lock_mode X locks rec but not gap 、 lock_mode X locks gap before rec 分别表示什么?InnoDB支持多种锁模式,其中包括行锁(record locks)和间隙锁(gap locks)。
2025-01-14 19:17:49
394
原创 简识MySQL的InnoDB Locking锁的分类
这些锁机制共同构成了InnoDB强大的并发控制功能,使得MySQL数据库能够在高并发环境下稳定运行。
2025-01-14 18:46:46
382
原创 简聊MySQL并发事务中幻读、虚读问题的解决方案
MySQL通过提高事务隔离级别、使用MVCC机制以及引入Next-KeyLock等策略,有效地解决了幻读问题。同时,由于MVCC机制的实现,MySQL在可重复读隔离级别下实际上并不会发生虚读问题。在实际应用中,开发者需要根据具体的业务场景和需求选择合适的解决方案,以确保数据的一致性和系统的性能。
2025-01-14 18:42:19
714
2
原创 简识MySQL中ReadView、RC、RR的关系
在MySQL中,ReadView是事务进行快照读操作时生成的读视图,它用于确定哪些数据对当前事务是可见的。ReadView的生成和属性受MySQL事务隔离级别的影响,特别是RC(Read Committed,读已提交)和RR(Repeatable Read,可重复读)这两个级别。
2025-01-14 10:40:19
277
原创 浅聊MySQL的事务隔离级别何时设置、为什设置
提醒:兄弟们在阅读时注意先浏览目录,根据需要读取,如果目录没有想要的节约时间不必往下读了。帅气聪慧的你懂得。MySQL事务的隔离级别设置对于确保数据的一致性和完整性至关重要。以下是关于何时设置、如何设置以及为什么设置MySQL事务隔离级别的详细说明,并附上相关示例。(Transaction isolation level 事务隔离级别)
2025-01-09 10:52:14
538
原创 小识MySQL中当前读CR和快照读SR
在MySQL中,尤其是使用InnoDB存储引擎时,存在两种主要的读取方式:当前读(Current Read)和快照读(Snapshot Read)。以下是关于这两种读取方式的详细解释和对比:定义:特点:使用场景:实现机制:定义:特点:使用场景:实现机制:综上所述,当前读和快照读在MySQL中各有其适用场景和性能特点。在选择使用哪种读取方式时,需要根据具体的应用场景和需求进行权衡。(望各位潘安、各位子健不吝赐教!多多指正!🙏)
2025-01-09 10:26:42
449
原创 浅聊MySQL中的LBCC和MVCC
MySQL中的LBCC(Lock-Based Concurrency Control,基于锁的并发控制)和MVCC(Multi-Version Concurrency Control,多版本并发控制)是两种不同的并发控制机制,它们在实现方式、作用以及应用场景上存在显著的区别。
2025-01-09 10:12:58
1039
原创 简识MySQL自带日志、InnoDB的日志
综上所述,MySQL自带的日志主要包括错误日志、查询日志、慢查询日志和二进制日志,而InnoDB存储引擎特有的日志包括重做日志和回滚日志。这些日志在MySQL的运行、维护、优化以及数据恢复等方面都发挥着重要作用。
2025-01-08 11:51:57
311
1
原创 简聊MySQL主从复制过程中,顺序读写和随机读写如何作用
在MySQL主从复制过程中,顺序读写和随机读写各自承担着不同的任务。顺序读写主要用于日志文件的复制和数据重演,以确保数据的一致性和完整性。而随机读写则主要用于索引访问、数据更新和查询处理等方面,以提高数据库的响应速度和性能。了解这些区别有助于更好地优化MySQL主从复制环境的性能。(望各位潘安、各位子健多多指正!希望您不吝赐教!🙏)
2025-01-08 11:41:49
302
原创 简聊MySQL的顺序读写和随机读写
顺序读写:数据按照物理地址的连续性进行读写操作,通常用于处理大型文件或连续的数据块。随机读写:数据分散在磁盘的不同位置进行读写操作,常用于索引查找、数据更新等需要访问不连续数据块的场景。顺序读写和随机读写在MySQL中的应用区别主要体现在数据加载与备份、索引操作、日志操作以及数据查询与更新等方面。了解这些区别有助于更好地优化MySQL数据库的性能,提高读写效率。在实际应用中,可以根据具体需求和场景选择合适的读写方式,以实现最佳的性能表现。
2025-01-08 11:31:08
288
原创 简聊代理主键与自然主键
自然主键自然主键是指事物属性中的自然唯一标识,即充当主键的字段本身具有一定的含义,是构成记录的组成部分。例如,员工的身份证号、学生的学号、产品的唯一编码等,这些字段在业务逻辑中本身具有唯一性,且是记录的重要部分。代理主键代理主键是指与业务无关的、无意义的数字序列值,仅具有主键作用。它不依赖于任何业务逻辑或自然属性,而是由系统自动生成。常见的代理主键有自增整数、UUID等。
2025-01-08 10:19:33
238
原创 小识MySQL的聚簇索引、一级索引、二级索引、AHI索引、联合索引
聚簇索引:确定数据的物理顺序,每个表只能有一个。一级索引:在MySQL的InnoDB中,与聚簇索引是同义词。二级索引:独立于数据存储,包含列值和指向数据行的指针,可以有多个。AHI索引:利用哈希算法加速内存数据访问,具有自适应性。联合索引:同时对多个列进行索引,遵循“最左前缀”原则。这些索引类型在数据库设计中各有其用途和优势,应根据实际需求合理选择和使用。(望各位潘安、各位子健多多指正!希望您不吝赐教!🙏)
2025-01-06 17:04:00
791
原创 小识MySQL中的DB_ROLL_PTR
DB_ROLL_PTR是InnoDB存储引擎中的一个内部字段,用于指向该行数据的上一个版本。这是InnoDB多版本并发控制(MVCC)机制的一部分,它允许InnoDB存储引擎保留已更改行的旧版本信息,以支持事务性功能,如并发控制和回滚操作。
2025-01-05 17:02:45
368
原创 浅易MySQL的bin log 是从 log buffer 中写入数据的吗?中间还需要什么? logfile cache 什么时候介入工作
MySQL的bin log(二进制日志)确实是从log buffer(日志缓冲区)内存中写入数据的,但这个过程并非直接一步完成,中间还涉及一些其他组件和步骤。
2025-01-05 11:43:09
929
原创 浅易MySQL内存区域log buffer中的数据在写入redo log前,是否会先加载到 操作系统file 缓存中?为什么?
MySQL内存存储区域log buffer中的数据在写入redo log前,会先加载到操作系统file缓存中。以下是对这一过程的详细解释: MySQL的日志系统是其数据存储和恢复机制的重要组成部分,其中redo log是用于记录数据修改操作的重做日志。当事务对数据页进行修改时,这些修改会首先以redo record的形式暂存在内存中的mtr(mini-transaction)中。当mtr提交时,这些redo record会被复制到redo log buffer中,形成redo log。MySQ
2025-01-05 11:09:09
831
原创 浅易MySQL的2PC
2PC,全称为Two-Phase Commit(二阶段提交),是一种用于确保多个数据库节点之间事务一致性的协议。它通过将事务的处理过程分为两个阶段——准备阶段和提交阶段来协调所有参与节点在事务提交时的一致性。
2025-01-04 18:47:12
343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人