- 博客(12)
- 收藏
- 关注
原创 猛攻JVM之JVM模型
如果 Java 虚拟机堆栈可以动态扩展,并且尝试扩展但没有足够的内存来实现扩展,或者没有足够的内存来为新线程创建初始 Java 虚拟机堆栈,则 Java 虚拟机将抛出OutOfMemoryError。Java 虚拟机实现可以为程序员或用户提供对 Java 虚拟机堆栈的初始大小的控制,以及在动态扩展或收缩 Java 虚拟机堆栈的情况下对最大和最小大小的控制。创建类或接口时,如果运行时常量池的构造需要的内存大于 Java 虚拟机方法区所能提供的内存,则 Java 虚拟机将抛出OutOfMemoryError。
2025-10-28 17:16:50
884
原创 复习类加载机制与双亲委派模型
类加载过程可以清晰地划分为五个阶段:加载(Loading) → 验证(Verification) → 准备(Preparation) → 解析(Resolution) → 初始化(Initialization)。可以看到Java6到Java7的时候把类变量的初始位置从永久代放到了堆中,为后面废除永久代做准备,这一步只是给分配初始内存位置和默认值,没有赋值具体的值。双亲委派模型在这一阶段会对代码做保护,避免核心类被恶意篡改,同名自定义类的可见空间会受到限制,这不是本章重点,一笔带过。
2025-10-27 18:56:05
623
原创 回表与聚簇索引与二级索引的一切
根据官方给出的答案,我们可以看到乍一看,哦,那不就是主键索引吗,也没什么特殊的,为什么要起一个这样的名字呢?为了回答上面的问题先来看看,什么样的索引是聚簇索引总结:有主键,用主键作为聚簇索引无主键,用表内第一个唯一索引作为聚簇索引无主键无唯一索引,InnoDB 会为每行数据生成一个单调递增的6字节字段的rowId来作为聚簇索引不难看出,设计者想要一个唯一的,每个表只有一个的特殊索引。那么这么设计是为什么呢?甚至表没有主键和唯一索引时,要新增一列来做这个事情。
2025-10-25 12:33:08
942
原创 Redis学习系列第一篇:数据结构
有没有想过一个问题,MySQL采用b+tree的好处之一是平衡查询的性能,尽量让每个查询找到叶子节点所需要遍历的层高是一致的。Redis的数据结构都有什么特点呢?(只需找到起点后线性遍历),且实现简单,符合Redis追求高性能与代码简洁性的设计哲学。(大规模),这位更是重量级,再次感慨Redis的设计。dict和为什么选择跳表加dict下篇再继续学习。
2025-06-25 22:36:37
822
原创 狂喜,我终于自己琢磨透了回溯
曾经闲来无事刷leetcode,被dfs折磨得死去活来,这个算法的思想很好理解,无非是回溯重走,落在代码上却搞得头大,昨夜突然仙人抚我顶,一下就通透了提示:以下是本篇文章正文内容,下面案例可供参考。
2025-04-18 13:40:51
342
原创 JVM学习篇
变量类型加载阶段初始化时机生命周期静态变量/方法类加载的初始化阶段类首次主动使用时(如访问静态变量)类卸载时销毁(通常 JVM 退出)实例变量对象实例化时new创建对象时对象被 GC 回收时销毁局部变量方法或代码块执行时方法调用时方法执行结束或代码块退出时销毁静态优先于实例:静态变量和代码块在类加载时初始化,实例变量在对象创建时初始化。父类优先于子类:继承关系中,父类先完成静态和实例初始化。代码顺序决定执行顺序:同一类中的静态变量/代码块按代码书写顺序执行。区域存储内容。
2025-04-15 23:05:56
833
原创 Java 并发编程之锁机制深度解析
•核心组件•state:同步状态(volatile int)•CLH队列:双向队列管理等待线程•实现原理线程尝试获取锁 → 成功:更新state→ 失败:加入队列自旋等待。
2025-04-13 10:52:41
1693
原创 Java线程池深度解析(二):线程池类型与任务队列选择指南
在线程池第一篇章的学习中,我们复习了线程池的基本参数和使用以及优雅关停,由于篇幅原因还是有很多细节没有展开。现在提出几个问题来开始本次线程池的学习之旅:1.一共有几种线程池,区别是什么2.关于线程池的workQueue有哪些,怎么选择?CPU密集型• 线程数 = CPU核心数 + 1(容量适度)I/O密集型• 线程数 = 2 × CPU核心数(有界)或混合型任务• 拆分为CPU密集型队列 + I/O密集型队列• 使用区分优先级通用原则•永远为队列设置合理上限•。
2025-04-11 14:51:06
2515
原创 并发学习篇:线程池其一
提到线程、并发等概念就难以避开线程池。线程池是Java程序员必会的知识点之一,我相信在编程和工作的过程中大家基本都遇到过因为并发产生的一些的问题。并发带来好处的同时也带来了编程方面的挑战(小李曾经被面试官在线程池方面问麻了)。温故而知新workQueue是一个,它用于存放提交给线程池的任务。当核心线程数()的线程都在忙时,新任务会放入workQueue中等待处理。如果队列满了,线程池会根据配置创建新的线程(直到达到如果队列和线程池都满了,任务会被拒绝,此时会调用。
2025-04-10 23:11:02
1958
原创 初见Prim算法
上一期我们探究了关于Kruskal算法求解最小生成树,这一期我们来看看Prim算法的差异理解Prim算法在实现时,无论是栈还是先进先出队列都不能满足需求,所以这里需要优先队列,每次弹出第一个元素去找下一个元素并加入。
2025-04-09 21:20:11
195
原创 初见Kruskal算法
生成树在无向连通图中,生成树是指包含了全部顶点的极小连通子图(用最少的边连接所有的点,包含原图全部的n个顶点和n-1条边,无环)。最小生成树n-1条边的权重加和最小称之为最小生成树(MST)理解Kruskal算法的思想并不难,同时也需要理解并查集和为什么需要并查集,下期继续学习Prim算法。
2025-04-08 23:41:37
284
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅