- 博客(7)
- 收藏
- 关注
原创 Go map 源码解读
考虑到如果map存储了数以亿计的key-value,一次性搬迁将会造成比较大的延时,Go采用逐步搬迁策略,即每次访问map时都会触发一次搬迁,每次搬迁2个键值对。当负载因子过大时,就新建一个bucket,新的bucket长度是原来的2倍,然后旧bucket数据搬迁到新的bucket。Go的map所采用的冲突处理策略是开放地址法和链地址法结合,对整个桶而言是链地址法,对单个记录而言是开放地址法。可以发现,参与hash计算的只有B+8位,所以即使在64位系统中,hash值为64位,也容易产生冲突。
2024-08-13 20:29:15
525
原创 JVM基础
JVM进行垃圾回收时,会先找到“非垃圾”对象,也就是还在使用的对象。找到非垃圾对象就需要从某些“根”去找,这些根就是gc root。gc root有一个特征,即。
2024-05-02 01:11:31
48
2
原创 ThreadLocal小结
在使用强引用时,会同时导致ThreadLocal与value泄漏,因为在业务代码中,ThreadLocalRef一旦不再使用,ThreadLocal也不会被回收,并且此时value也无法在业务代码中进行访问。而使用弱引用,只会存在value泄漏的情况。ThreadLocal的调用结束了,线程不一定会结束,CurrentThreadRef->CurrentThread->ThreadLocalMap->Key->ThreadLocal的引用会一直存在,导致ThreadLocal只能在线程结束时被回收。
2024-05-01 22:39:31
443
原创 HashMap的put方法
HashMap的put方法的流程1.key通过哈希+与运算得出数组下标2.如果数组下标位置元素为空,则将key和value封装并放入该位置a.jdk1.7,是entity对象b.jdk1.8,是node对象3.如果数组下标位置元素不为空,则要分情况讨论a.jdk1.7,先判断是否需要扩容,如果不用扩容就生成entity对象,用头插法插入当前位置链表b.jdk1.8,先判断当前位置上的node类型,是红黑树还是链表i.如果是红黑树,则将key和value封装为一个红黑树节点添加到红黑树中,在搜
2024-04-23 16:49:55
74
原创 MyBatis分页
RowBounds中传入的limit分页参数,是在sql执行完后,把所有数据加载到内存中,然后再进行的逻辑分页,并不是sql执行前将limit拼接到where条件后面。
2024-04-23 16:18:21
113
原创 ArrayList和LinkedList对比
ArrayList基于数组,而LinkedList基于链表。由于基于的底层数据不同,所以使用场景不同。ArrayList有数组特性,所以适合随机访问;LinkedList有链表特性,所以适合增加、删除元素。ArrayList源码中就是用Object[ ]来存储数据。可以看到LinkedList通过index访问元素需要遍历。ArrayList和LinkedList都实现了List的接口,但LinkedList实现了Deque接口,可以当做双端队列使用。
2024-04-23 14:38:00
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人