文章 2023-08-29 来自:开发者社区

HashMap jdk1.7和1.8源码剖析(三)

4.7 remove方法remove(key) 方法 和 remove(key, value) 方法都是通过调用removeNode的方法来实现删除元素的final Node removeNode(int hash, Object key, Object value, boolean matchValue, boolean movab...

HashMap jdk1.7和1.8源码剖析(三)
文章 2023-08-29 来自:开发者社区

HashMap jdk1.7和1.8源码剖析(二)

4.4 hash方法Java 8中的散列值优化函数只做一次16位右位移异或key.hashCode()函数调用的是key键值类型自带的哈希函数,返回int型散列值理论上散列值是一个int型,如果直接拿散列值作为下标访问HashMap主数组的话,考虑到2进制32位带符号的int范围大概40亿的映射空间。只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放....

HashMap jdk1.7和1.8源码剖析(二)
文章 2023-08-29 来自:开发者社区

HashMap jdk1.7和1.8源码剖析(一)

1 概述HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长.HashMap是非线程安全的,只适用于单线程环境,多线程环境可以采用并发包下的concurrentHashMapHashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆HashMap是基于哈希表....

HashMap jdk1.7和1.8源码剖析(一)
文章 2023-08-29 来自:开发者社区

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(三)

3.2.2红黑树先看红黑树的基本概念:红黑树是一课特殊的平衡二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn)。红黑树每个节点都有一个标识位表示颜色,红色或黑色,具备五种特性:每个节点非红即黑根节点为黑色每个叶子节点为黑色。叶子节点为NIL节点,即空节点如果一个节点为红色,那么它的子节点一定是黑色从一个节点到该节点的子孙节点的所有路径包含相同个数的黑色节点 对....

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(三)
文章 2023-08-29 来自:开发者社区

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(二)

3.1.8 size()操作  如果我们要统计整个ConcurrentHashMap里元素的大小,就必须统计所有Segment里元素的大小后求和。Segment里的全局变量count是一个volatile变量,那么在多线程场景下,我们是不是直接把所有Segment的count相加就可以得到整个ConcurrentHashMap大小了呢?不是的,虽然相加时可以获取每个Segment的count的最....

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(二)
文章 2023-08-29 来自:开发者社区

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(一)

一、背景:线程不安全的HashMap    因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。效率低下的HashTable容器     HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程....

并发编程之ConcurrentHashMap jdk1.7和1.8源码剖析(一)
文章 2023-08-10 来自:开发者社区

设计模式之代理模式(jdk和cglib、手撕源码、自创动态代理) 2

自己实现动态代理其实到这里我们就发现了,代理类其实就是把方法抽象为属性,然后依旧是实现接口,然后重写接口的方法,只不过方法中调用的是InvocationHandler中的invoke方法。这里我们可以自己实现编写动态代理。在手写动态代理前,先理清楚思路。1.重写InvocationHandler接口2.重写类加载器,可以进行文件的二进制加载3.重写Proxy.newProxyInstance方法....

设计模式之代理模式(jdk和cglib、手撕源码、自创动态代理) 2
文章 2023-08-10 来自:开发者社区

设计模式之代理模式(jdk和cglib、手撕源码、自创动态代理) 1

代理模式顾名思义就是进行代理,简单来说就是经纪人,他直接与你沟通,并帮助做更多的事情。在程序中,代理模式那可谓是非常重要,像Spring的aop就是动态代理,而且很多框架中都是用到了代理模式。代理模式在我们不改变原有代码的基础上对某一个方法进行增强,这种增强可以是提前编写好的代码,也可以是自动编写的代码。这就分为静态代理和动态代理。静态代理静态代理是显式的帮助我们对目标类进行增强。我们定义一个场....

设计模式之代理模式(jdk和cglib、手撕源码、自创动态代理) 1
文章 2023-08-09 来自:开发者社区

双管齐下!JDK源码+HotSpot源码一次性学完

JDK源码手册除了第一章节的内容外,我们会从第二章开始自下而上,从简单到复杂的有顺序的深度学习整个Concurrent包!Semaphore(Semaphore也就是信号量,提供了资源数量的并发访问控制)HotSpot源码手册这份手册主要讲述的就是HotSpot基础功能模块的源码,这份手册对于你基础地基将会是一个很好的补充,同时手册将会结合大量的实例进行讲解,这样对于受众来说将会更加容易接受以及....

双管齐下!JDK源码+HotSpot源码一次性学完
文章 2023-07-31 来自:开发者社区

Alibaba新产:“Java并发笔记”闪耀来袭,JDK源码奥义尽在其中

JDK是什么JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。什么是JDK都知道了,那对于JDK源....

Alibaba新产:“Java并发笔记”闪耀来袭,JDK源码奥义尽在其中

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐