源码分析 LinkedHashMap

HashMap 大家都清楚,底层是 数组 + (链表 / 红黑树),元素是无序的,而 LinkedHashMap 则比 HashMap 多了这一个功能,并且,LinkedHashMap 的有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照访问的顺序(初始化LinkedHashMap对象时设置a
源码 Java 2020年09月10日 5,139次浏览

源码分析 HashMap

作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。源码赏析JDK1.8 的HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。public class HashM
源码 Java 2020年09月02日 888次浏览

源码分析 ConcurrentHashMap

HashMap 源码中主要了解其核心源码及实现逻辑。ConcurrentHashMap 就不再重复那些数据结构相关的内容咯,这里重点看一下它的并发安全实现。源码如下。public class ConcurrentHashMap<K,V> extends AbstractMap<K,
源码 Java 2020年08月31日 608次浏览

源码分析 ThreadLocal

先看Thread类的源码,再理解ThreadLocal相对容易一些。ThreadLocal类 提供了 get/set线程局部变量的实现,ThreadLocal成员变量与正常的成员变量不同,每个线程都可以通过 ThreadLocal成员变量 get/set自己的专属值。ThreadLocal实例 通常
源码 Java 2020年08月26日 614次浏览

源码解析 Thread

实现多线程从本质上都是由 Thread类 来完成的,其源码量很多,本次只看一些常见且重要的部分,源码和解析如下。public class Thread implements Runnable {/** 这里只看一些 常见的参数 *//** 线程名 */private volatile char na
源码 Java 2020年08月19日 705次浏览

源码解析 String

重点看一下equals()和hashcode()方法,然后看一下String类常用方法的实现。public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
源码 Java 2020年08月18日 686次浏览

JVM 第十章 类加载器

类加载器类与类加载器判断类是否“相等”任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,
Java jvm 2020年08月17日 678次浏览

JVM第九章 类加载的过程

类加载的过程类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。加载加载的过程“加载”是“类加载”过程的一个阶段,不能混淆这两个名词。在加载阶段,虚拟机需要完成 3 件事:通过类的全限定名获取该类的二进制字节流。将二进制字节流所代表的静态结构转化为方法区的运行时数据结构。在内存中创建一个代表
Spring jvm 2020年08月16日 719次浏览

JVM 第八章 类加载的时机

类加载的时机类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段:加载验证准备解析初始化使用卸载验证、准备、解析 3 个阶段统称为连接。加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而
Java jvm 2020年08月14日 727次浏览

JVM 第七章 类文件结构

类文件结构JVM 的“无关性”谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序
Java jvm 2020年08月13日 538次浏览