底层
文章平均质量分 65
忧郁的叮当猫
路虽远,行则将至;书虽难,学则必成。
展开
-
Java线程池的工作流程
1 当一个任务通过submit或者execute方法提交到线程池的时候,如果当前池中线程数(包括闲置线程)小于coolPoolSize,则创建一个线程执行该任务。 2 如果当前线程池中线程数已经达到coolPoolSize,则将任务放入等待队列。 3 如果任务不能入队,说明等待队列已满,若当前池中线程数小于maximumPoolSize,则创建一个临时线程(非核心线程)执行该任务。 4 如果当前池中线程数已经等于maximumPoolSize,此时无法执行该任务,根据拒绝执行策略处理。 注...原创 2021-11-04 17:48:10 · 1587 阅读 · 1 评论 -
HashMap扩容后是如何重新分布的?
扩容时,元素在新表中的位置视情况而定 1. 当元素只是孤家寡人即元素的next==null时,位置为e.hash & (newCap - 1),源码第711行 2. 当元素有next节点时,该链表上的元素分两类 e.hash & oldCap = 0的,在新表中与旧表中的位置一样,源码第737行 e.hash & oldCap != 0的,位置为旧表位置+旧表容量,源码第741行 ...原创 2021-10-27 11:48:42 · 720 阅读 · 0 评论 -
Redis数据结构底层实现
1. 字符串处理(string) 我们都知道redis是用C语言写,但是C语言处理字符串和数组的成本是很高的,下面我分别说几个例子。 没有数据结构支撑的几个问题 及其容易造成缓冲区溢出问题,比如用strcat(),在用这个函数之前必须要先给目标变量分配足够的空间,否则就会溢出。 如果要获取字符串的长度,没有数据结构的支撑,可能就需要遍历,它的复杂度是O(N) 内存重分配。C字符串的每次变更(曾长或缩短)都会对数组作内存重分配。同样,如果是缩短,没有处理好多余的空间,也会造成内存泄漏。 Red转载 2021-08-24 15:13:45 · 380 阅读 · 1 评论