- 博客(8)
- 收藏
- 关注
原创 Redis探寻之路 - 服务器策略
的 key(这个是最常用的)。当一个sentinel接收到一条信息后,会根据SentinelID检查,如果不是自己的Sentinel发送的,将根据信息的参数对主服务器的实例结构做更新。相反地,如果源节点没能在自己的数据库里面找到指定的键,那么这个键有可能已经被迁移到了目标节点,源节点将向客户端返回一个ASK错误,指引客户端转向正在导人槽的目标节点,并再次发送之前想要执行的命令。主服务器每次向从服务器传播N个字节的数据时,主服务器的复制偏移量加上N,从服务器接收到数据时,从服务器的复制偏移量也加上N。
2023-09-21 21:16:44
30
原创 Redis成长之路 - 数据结构
SDS以空字符结尾,保存空字符的1字节空间不计算在SDS的len属性中,以空字符结尾好处是可以之IE重用一部分C字符串函数库里的函数链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。Redis构建了自己的链表实现,当一个列表键包含了数量比较多的元素,或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。每个链表节点都是由listNode结构来实现的。
2023-09-21 21:13:42
29
原创 并发编程探寻之路 - 共享模型值之内存无锁工具
全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取 锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源。
2023-09-21 21:09:12
49
原创 并发编程探寻之路 - 进程线程管程
本次课使用阻塞式的解决方案:synchronized,来解决上述问题,即俗称的【对象锁】,它采用互斥的方式让同一 时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程 tomcat 的异步 servlet 也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞 tomcat 的工作线程 ui 程序中,开线程进行其他操作,避免阻塞 ui 线程。方法是Java中的一个线程阻塞工具。
2023-09-21 21:07:03
44
原创 java虚拟机成神之路 - 虚拟机字节码执行引擎
如果执⾏的是实例⽅法(没有被static修饰的⽅法),那局 部变量表中第0位索引的变量槽默认是⽤于传递⽅法所属对象实例的引⽤,在⽅法中可以 通过关键字“this”来访问到这个隐含的参数。“虚拟机”是一个相对于“物理机”的概念,这两种机 器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层 面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执 行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
2023-09-21 20:54:50
26
原创 java虚拟机成神之路 - 虚拟机类加载机制
Java虚拟机把描述类的Class文件加载到内存,并对数据进行校验、转换解析和初始化,形成可以被虚拟机直接使用的Java类型,这个过程是虚拟机的类加载机制一个类型被加载到虚拟机的过程:加载、验证、准备、解析、初始化、使用和卸载。解析阶段是可以变化的。
2023-09-21 20:53:33
27
原创 java虚拟机成神之路 - 垃圾收集器与内存分配策略:
如何确定对象是否死亡:第一个为引用计数算法,对象被引用一次时计数就+1,引用失效时计数就减一,计数值为0时该对象已经死亡不能被使用。但是当两个不可能再被引用的对象互相引用时,就发生问题。现在主流的虚拟机几乎不适用引用计数算法来管理内存。第二个为可达性分析算法:从根节点GC Roots进行向下搜索,与之关联的都是存活对象,没搜索到的都是不可能再被使用的对象。GCRoots不可达的会被判定为可回收对象,当第二次。
2023-09-21 15:55:46
36
原创 java虚拟机成神之路 - JVM内存区域与内存溢出异常
类检查通过后加载对象的内存,假设内存是按区域划分的,空闲内存在指针的一边,使用过的内存在指针的另一边,挪动指针来分配内存大小,称为指针碰撞的方式。这个算法的基本思路就是通过 一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过 程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连, 或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。**方法区**:线程共享。
2023-09-21 15:50:18
34
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人