大白话
Thxxxxxx
然鹅我不想简介自己
展开
-
大话强软弱虚引用
强引用就是我们平时所见对象,只要对象还或者,垃圾回收器就不能对其进行回收,即使内存满了软引用也能豁免一些垃圾回收,但内存满了之后不管它活着不,要对其进行回收弱引用是豁免不了任何垃圾回收,只要回收就会将其回收虚引用,不能通过它来访问对象,幻象引用仅仅是提供了一种确保对象被fnalize以后,做某些事情的机制...原创 2019-08-30 21:52:43 · 208 阅读 · 0 评论 -
大话synchronize底层原理
在每个对象中mark word中LockWord指向monitor的起始地址,也就是每个对象与一个monitor相关联。在monitor中有个Owner字段记录着拥有锁的线程。初始时为NULL表示当前没有任何线程拥有该锁,当线程成功拥有该锁后保存线程唯一标识,当锁被释放时又设置为NULL。修改过程都是以CAS的方式修改。synchronize 就有了偏向锁,偏向锁的适用场景为 没有发生锁竞争的情...原创 2019-08-09 15:49:56 · 633 阅读 · 0 评论 -
大话ConcurrentHashMap的put,get过程
put最最最一开始得检查桶是否进行初始化,然后确定判断所放桶中是否有元素,没有元素的话,那么就用CAS的方式添加元素,当然有可能失败,有可能其他线程已经抢占先添加,这个过程在一个死循环里,失败了再从头来一次,判断桶是否初始化,桶内是否有元素等等,如果此时桶内有元素了,那么判断桶内第一元素的hash值是否为MOVED,说明正在扩容,那么此线程就会帮助扩容,如果不是的话,那么就对一个元素synch...原创 2019-06-26 21:55:48 · 3629 阅读 · 5 评论 -
大话HashMap的put,get过程
put最先判断桶的长度是否为0,为0的话则需要先对桶进行初始化操作,接着,求出hashcode并通过扰动函数确定要put到哪个桶中,若桶中没有元素直接插入,若有元素则判断key是否相等,如果相等的话,那么就将value改为我们put的value值,若不等的话,那么此时判断该点是否为树节点,如果是的话,调用putreeval方法,以树节点的方式插入,如果不是树节点,那么就遍历链表,如果找到了ke...原创 2019-06-25 20:12:42 · 1420 阅读 · 0 评论 -
大话TreeMap的put,get过程
get首先会判断在初始化TreeMap的时候是否传入了外部选择器Comparator,如果传入了,那么利用Comparator遍历整棵树,找到要存放的位置,利用Comparator的compare()方法比较树根节点p的key和传入的key,compare方法等于0说明相等,那么直接返回根节点,小于0的话p=p.left,大于0的话p=p.right。若没有找到返回null。没有传入Compa...原创 2019-06-26 16:06:58 · 300 阅读 · 0 评论