- 博客(8)
- 收藏
- 关注
原创 JDK1.8中的ConcurrentHashMap源码分析
JDK1.8中的ConcurrentHashMap源码分析一、容器初始化1、源码分析在jdk8的ConcurrentHashMap中一共有5个构造方法,这四个构造方法中都没有对内部的数组做初始化, 只是对一些变量的初始值做了处理jdk8的ConcurrentHashMap的数组初始化是在第一次添加元素时完成// 没有维护任何变量的操作,如果调用该方法,数组长度默认是16public ConcurrentHashMap() {}// 传递进来一个初始容量,ConcurrentHashMa
2021-04-03 20:12:28
5072
10
原创 Java中的锁的分类以及锁优化
Java中的锁的分类以及锁优化只要涉及到并发问题,同步往往并不可少的,而同步的实现比较简单的方式就是加锁。Java锁的种类乐观锁/悲观锁乐观锁:通俗地说就是不管是否有并发问题的风险,先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享的数据的却被争用,产生了冲突,那再进行其他的补偿措施,最常用的补偿措施是不断地重试,直到出现没有竞争地共享数据为止;常见的乐观锁实现机制有两种:CAS操作CAS(Compare and Swap 比较并交换),当多个线程尝试使用CAS同时更新同一
2020-12-17 11:51:49
1503
3
原创 浅谈Java内存模型(JMM)
浅谈Java内存模型(JMM)在计算机硬件的组成中,为了避免CPU与存储设备的速度相差太大(甚至是几个数量级的速度差距)而导致CPU总是在等待存储设备,在CPU与存储设备之间加了一层高速缓存寄存器(Cache),可以理解为Cache帮CPU等待数据,这样CPU就无需一直等待存储设备了。这样就大致构成了计算机硬件内部的内存模型:但是这样的模型会存在"数据一致性“,比如两个处理器同时读取了一段内存区域的内容并做了修改,都将修改的内容写回到内存中,到底哪个修改才是最终的正确值?给出的解决方案是让读写操作
2020-12-16 11:15:14
348
1
原创 Java的方法调用与重载、覆盖的本质
Java的方法调用与重载、覆盖的本质我们都知道,Java源代码需要经过前端编译器(Javac)编译后生成class字节码文件,才可以被JVM的类加载器加载;在class文件中,一句句java代码被解析成一个个对应的字节码指令,本文的主旨就是讨论方法调用的字节码指令以及方法重载与覆盖的本质。在Class字节码指令中,方法的调用涉及到五条指令,他们又分为普通调用指令和动态调用指令:普通调用指令:invokestatic:调用静态方法,解析阶段确定唯一方法版本invokespecial:调用方法、私
2020-12-10 13:27:41
649
1
原创 Java中关于i++的一些问题
在本文展开前,读者需要了解一些字节码有关的知识,以及JVM虚拟机栈中栈帧的局部变量表和操作数栈等知识,笔者在这里只给出一些大概的简述。字节码Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。局部变量表局
2020-12-04 21:39:50
1087
6
原创 浅谈Java类加载器(源码解析)
浅谈Java类加载器参考内容:深入理解Java虚拟机(JVM高级特性与最佳实践) ——周志明老师尚硅谷深入理解JVM教学视频——宋红康老师我们都知道Java的类加载器结构为下图所示(JDK8及之前,JDK9进行了模块化):关于三层类加载器、双亲委派机制,本文不再板书,读者可自行百度。那么在JDK的源码中,三层结构的具体实现是怎么样的呢?Bootstrap ClassLoader(引导类加载器)引导类加载器是由C++实现的,并非Java代码实现,所以在Java代码中是无法获取到该类加载器
2020-12-04 21:02:51
1726
9
原创 Java实现常见的四种查找算法
查找算法介绍在java中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找线性查找算法代码实现 /** * 这里我们实现的线性查找是找到一个满足条件的值,就返回 * @param arr * @param value * @return */ public static int seqSearch(int[] arr, int value) { // 线性查找是逐一比对,发现有相同值,就返回下标 for (int i = 0; i
2020-08-29 20:32:58
1857
原创 Java实现常见的八大排序
八大排序1.冒泡排序基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,再进行)应用实例排序规则一共进行 数组
2020-08-29 20:24:54
663
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅