- 博客(7)
- 收藏
- 关注
原创 ConcurrentHashMap Java1.8 源码解析
前面的帖子已经详细说明了 HashMap的实现原理,但我们知道HashMap不是一个线程安全的容器。为了保证多线程数据安全,java JUC包提供了HashMap的线程安全版本 —— ConcurrentHashMap本文所列代码取自 Java version “1.8.0_261”为什么HashMap不是线程安全的...
2021-03-23 20:25:44
189
原创 遍历HashMap源码——红黑树原理、HashMap红黑树实现与反树型化(三)
本章将是HashMap源码的最后一章,将介绍红黑树及其实现,HashMap的remove方法与反树型化。长文预警~~遍历HashMap源码——HashMap红黑树实现与反树型化什么是红黑树二叉查找树红黑树原理左旋右旋插入节点删除节点HashMap的红黑树实现什么是红黑树二叉查找树理解红黑树的前提必须知道红黑树是什么。它的本质就是一个特殊的二叉查找树。那么问题来了,什么是二叉查找树?左子树上所有结点的值均小于或等于它的根结点的值。右子树上所有结点的值均大于或等于它的根结点的值。左、右子树也分别
2021-03-16 15:26:46
813
原创 遍历HashMap源码——put实现、扩容与树型化(二)
接上篇,本文主要介绍HashMap put方法的机制put方法本次模拟场景分析 HashMap hashMap = new HashMap(); for(int i = 0; i < 11; i++){ //添加12个元素 hashMap.put(i, i); }第一行代码上篇我们已经逐行对源码进行了分析,接下的put方法会发生什么呢,继续来看源码首先,我们来总结一下当第一个元素进入之后当下的变量值 //第一个元素值 [0,0] tran
2021-03-15 23:00:59
228
2
原创 遍历HashMap源码——类结构与构造方法(一)
HashMap不多废话,直接进入正题。逐行分析HashMap源码~~ 走起(本文所使用 Java version “1.8.0_261”)总体结构变量说明静态变量默认初始化容量 必须是2的N次幂 /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
2021-03-15 16:24:28
105
原创 Redis深度历险——原理与集群篇
原理篇线程IO模型首先说明,Redis是中间件是单线程的。那么redis是如何保证高并发的呢。这就设计到一个词汇“多路复用”阻塞IO与Java的IO/NIO类似,IO本身是一个阻塞方法。当客户端发起write时,操作系统将write请求套接字存储在send buffer中客户端操作系统将缓冲区内容发送至网卡,网卡通过硬件“网际路由”将数据送到服务器网卡服务器操作系统将网卡数据放到接受缓冲的recv buffer中服务器read数据以上是一个单项操作,反之亦然。由此可见,阻塞IO最大的时
2021-03-06 14:12:40
104
原创 Redis深度历险——基础篇
Redis基础数据结构string(字符串)list(列表)hash (字典)set (集合)zset (有序集合)各数据结构简介Redis的所有存储都是key-value形式的,数据结构是指value值的类型1.StringString由字符数组组成,redis的实现类似于java的ArrayList,由冗余字段来减少内存的频繁分配。当String大小小于1MB时,扩容容量加倍。当String大小大于1MB时,每次只会增加1MB(MAX = 512MB)如果value值是一个整数,
2021-03-05 17:43:16
297
原创 浅谈Java GC
Java GCJVM 内存区域Java堆(运行时数据区)方法区(永久代)本地方法栈Java栈(虚拟机栈)程序计数器Java GC 方法分代收集法新生代MinorGC老年代永久代(Java8已废弃)分区收集法Java GC 算法如何确定垃圾?引用计数法可达性分析如何清除垃圾?复制算法标记清除算法标记整理算法Java GC 垃圾收集器Serial垃圾收集器(单线程、复制算法)ParNew垃圾收集器(S...
2020-04-22 10:53:21
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人