随笔分类 - JDK 1.8 源码
摘要:本文将主要结合源码对 JDK 中的阻塞队列进行分析,并比较其各自的特点; 一、BlockingQueue 概述 说到阻塞队列想到的第一个应用场景可能就是生产者消费者模式了,如图所示; 根据上图所示,明显在入队和出队的时候,会发生竞争;所以一种很自然的想法就是使用锁,而在 JDK 中也的确是通过锁来实
阅读全文
摘要:本文的目的并不是让你对 更加了解,然后灵活运用;因为 的一个历史遗留的类,目前并不建议使用,所以本文主要和 对比,感受同样功能的不同实现,知道什么是好的代码;所以在阅读本文之前最好先了解一下 ,可以参考 "HashMap 相关" ; 一、 类定义 可以看到它和 虽然都是哈希表,但是结构完全不一样,他
阅读全文
摘要:平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它;但是如果我们不是很清楚它的生命周期,这时候就比较麻烦;通常有这样几种处理方式: 由一个线程定时处理,可以是 或者 ; 利用重写 ,实现 FIFOCache 或者 LRUCache;可以
阅读全文
摘要:在阅读本文之前最好对 Reference 框架有一个整体的把握,可以参考我上一篇博客 "Reference 框架概览" ;本文主要讲了 的子类实现和应用( ); Java 引用的强弱关系 : 一、StrongReference 强引用 :我们通常使用的引用,形如 此时从 stack 中的 o,到 h
阅读全文
摘要:对于 类大家可能会比较陌生,平时用的也比较少,对他的印象可能仅停在面试的时候查看引用相关的知识点;但在仔细查看源码后发现 还是非常实用的,平时我们使用的类都是强引用的,它的回收完全依赖于 GC;但是对于有些类我们想要自己控制的时候就比较麻烦,比如我想在内存还足够的时候就保留,不够的时候就回收,这时使
阅读全文
摘要:`LinkedHashMap HashMap+LinkedList`,提供了顺序访问的功能;所以在看这篇博客之前最好先看一下我之前的两篇博客, "HashMap 相关" 和 "LinkedList 相关" ; 一、整体结构 1. 定义 从上述定义中也能看到 其实就是继承了 ,并加了双向链表记录顺序,
阅读全文
摘要:`HashMap HashMap`效率要高于以往的所有版本,本文会详细介绍相关的优化,但是主要还是写 JDK8 的源码。 一、整体结构 1. 类定义 可以看到 是完全基于 接口实现的,其中 是`Map Map`接口的最小实现。 看名字也能猜到,他是基于哈希表实现的(数组+链表+红黑树): 2. 构造
阅读全文
摘要:`LinkedList`的源码大致分三个部分,双向循环链表的实现、List的API和Deque的API。 一、定义 从类定义和图中也能很清晰的看到, 的结构大致分为三个部分;同时和 相比,他并没有实现 接口,所以他并不支持随机访问操作;另外可以看到他的 接口是通过 实现的,同时还实现了多个迭代器,表
阅读全文
摘要:`ArrayList`的源码其实比较简单,所以我并没有跟着源码对照翻译,文本只是抽取了一些我觉得有意思或一些有疑惑的地方分析的。 一、成员变量 其中 被声明为了 ,那么ArrayList是如何实现序列化的呢? 查看 和`readObject`的源码如下: 可以看到在 之后又判断了他的 类型是不是 ,
阅读全文
摘要:在深入了解 Array 之前,一直以为 Array 比较简单,但是深入了解后才发现其实挺复杂的。所以我把重要的写在最前面,但凡遇到和语言本身相关的问题,都可以查阅 "Java Language and Virtual Machine Specifications" 一、Array 是一个是对象吗?
阅读全文
摘要:在此之前有无数次下定决心要把JDK的源码大致看一遍,但是每次还没点开就已被一个超链接或者其他事情吸引直接跳开了。直到最近突然意识到,因为对源码的了解不深导致踩了许多莫名其妙的坑,所以再次下定决心要把常用的类全部看一遍。。。 一. 声明和成员变量(不可变性) String的大部分操作都是围绕 这个字
阅读全文
浙公网安备 33010602011771号