ZHENGRUI'BLOG

读书、健身、旅行


  • Home

  • Archives

  • About

  • Search

浅析List

Posted on 2018-07-18 | In Java源码浅析 | 0 Comments | Visitors
List是我们工作中用的最多的集合框架之一,这片博客简单介绍下List主要的两个实现类ArrayList和LinkedList,以及一个不再使用的很古老的集合类Vector。 ArrayList在JDK中的源码中的类注释对ArrayList的功能进行介绍。翻译过来主要有一下几点。 它是一个实现了List结构的动态数组,拥有List接口的所有操作,底层实现还是借助一个数组,可以存储null。 ArrayList的性能很高,它的很多操作的实现复杂度都是常数时间,其他的操作也都是在线性时间内,拥有比LinkedList更好的性能。 ArrayList有一个成员变量capacity,可以自动扩容,但 ...
Read more »

浅析AbstractQueuedSynchronizer

Posted on 2018-05-07 | In Java源码浅析 | 0 Comments | Visitors
我们都知道java是支持多线程的,在多线程环境下访问共享的可变的对象时,我们需要同步来实现线程安全,通常我们是通过加锁使其由并行变成串行。而加锁我们会可能会使用呢synchronizer或者lock,而这里面其实存在着很多问题。我们在学习并发时很多书籍或者博客都告诉我们要保证可见性和原子性,java中中为这些提供的支持是volatile和锁。那么我们是否想过这些问题?在多线程环境下为什么数据会不可见?volatile又是如何保证可见性的?锁到底是什么?它又是如何保证操作的原子性和数据的可见性的?synchronizer是java中的关键字,我们可以猜测jvm对它进行了支持使它实现了锁的语义,那 ...
Read more »

浅析ThreadLocal

Posted on 2018-04-23 | In Java源码浅析 | 0 Comments | Visitors
在一次面试被问到了ThreadLocal,其间被问到了一个问题:ThreadLocal有什么缺陷。笔者不确定的回答:内存泄漏?面试官随即问道了:为什么会造成内存泄漏?笔者懵逼了,不知道该如何回答。下面在这片博客中通过源码(JDK1.8)来简单了解一下ThreadLocal的内部实现,好好看一下它为什么会造成内存泄露,以及在什么情况下会造成内存泄露。 概要我们都知道ThreadLcoal可以将一个变量与当前线程绑定,使这个变量变成线程私有,以此来实现线程安全。通常我们会用它来避免多个函数或组件之间公用变量传递的麻烦。下面我们看一下javaDoc中对ThreadLocal的介绍。 12345678 ...
Read more »

浅析Java并发工具类(1) - CountDownLatch

Posted on 2018-03-30 | In Java源码浅析 | 0 Comments | Visitors
在java.util.concurrent包下面有一些并发工具类,本博客通过源码简单介绍下这些并发工具类。 CountDownLatchCountDownLatch俗称闭锁,在JDk中的介绍是:它是一个同步辅助类,允许一个或者多个线程等待,直到其他的一系列线程均执行完毕。它采用一个可以指定的count变量来表示其他需要执行完毕的线程数,每当一个线程执行完毕时,可以调用countDown方法使count减一,直到count为0,被await阻塞的线程继续执行。同时在JDk的注释中还指出count无法被重置,如果需要count被重置,则可以考虑使用另一个同步工具类CyclicBarrier。Cyc ...
Read more »

浅析Java包装类

Posted on 2018-03-28 | In Java源码浅析 | 0 Comments | Visitors
前阵子笔者被电话面了个试,其间被问到了一个java包装类的问题,让笔者说道说道java包装类的缓存机制。当时笔者一脸懵逼,一个包装类还缓存个奶子欧!最近闲来无事便翻了些博客和java包装类的源码,看看这包装类的缓存机制到底是什么样子的。 装箱与拆箱关于包装类说的最多的就是自动装箱和拆箱,我们先来看看这个。java现在有九种基本类型,int,byte,short,float,double,long,boolean,char和reference。除了引用类型,在JDK的lang包下面存在着其他八种基本类型对应的包装类,分别是Integer,Byte,Short,Float,Double,Long, ...
Read more »

浅析枚举

Posted on 2018-03-26 | In Java源码浅析 | 0 Comments | Visitors
笔者前阵子写了一篇关于java集合Set的博客,在看到EnumSet的源码时,觉得还是说一说java中关于枚举这个类型,否则很难说的清楚。这片博客主要说一下Java中枚举的实际存在形式,同时再看一看EnumSet和EnumMap的源码。 Enum我们都知道Enum类型在编译时class类型一样,都会被变异成字节码文件,我们就来看看在编译过程中编译器到底做了什么,编译成的字节码问价又是什么样的。 我们先新建一个Enum类。 12345678910public enum DateType { YEAR, MONTH, DAY, HOUR, MINUTE, ...
Read more »

浅析Set

Posted on 2018-03-22 | In Java源码浅析 | 0 Comments | Visitors
Set是java集合框架的重要成员之一,常见的有HashSet,LinkedHashSet,TreeSet等。本篇博客便通过源码简单介绍下这些Set集合。 概览Set是一个不允许重复的集合框架,很多书籍会把它形容成一个罐子。你可以把数据放入罐中,但是当你再想把它取出来时,你就无从下手;只能将所有数据倒出,一个个分辨。也就说你无法随机访问Set中的数据,那么相同的重复数据便没有意义,因为你无法分辨他们,对Set而言他们是完全相同的。下面看一下Set家族的继承结构: 可以看到主要的几个实现类都实现了set接口,并且继承了AbstractSet抽象类。AbstractSet这个抽象类中除了实现了基 ...
Read more »

浅析LinkedHashMap

Posted on 2018-03-21 | In Java源码浅析 | 0 Comments | Visitors
正常情况下HashMap已经足够我们使用了。但在某些场景下,我们可能需要保证数据插入集合的有序性,使得我们在遍历时,数据能按照我们插入时的顺序输出。这种情况下,HashMap就满足不了要求了。JDK对此情况做出了补偿,提供了一个新的集合类LinkedHashMap。该类继承于HashMap,但在底层存储结构上做出些改变,它在table数组(键值对数组)中的数据之间使用一个双向链表来维持数据的有序性。LinkedHashMap的存储结构大致可描述如下: 它的节点结构如下: 123456static class Entry<K,V> extends HashMap.Node<K ...
Read more »

浅析TreeMap

Posted on 2018-03-20 | In Java源码浅析 | 0 Comments | Visitors
TreeMap虽然并不常用,但也是Java集合框架中一个重要的成员,在需要保证集合中成员有序时,它可以很好的发挥作用。TreeMap底层是基于红黑树实现的,它的增删查其实就是红黑树的增删查。但笔者这里并不打算详细介绍红黑树,因为红黑树的操作很复杂,特别是增删时需要对树进行多次旋转,并可能需要改变节点的颜色,以此来保证树的平衡并使之符合红黑树的定义。因此这片博客中笔者只是浅尝辄止,对TreeMap的源码进行简单分析。本文源码基于JDK1.8。JDK1.8开始虽然对TreeMap的源码进行了些许改变,但改变不大,底层原理不变。 概览TreeMap的类的定义如下: 123public class T ...
Read more »

浅析HashMap

Posted on 2018-03-19 | In Java源码浅析 | 0 Comments | Visitors
JDK1.8开始HashMap的源码有了一些改变,这篇博客主要分别介绍下JDK1.7和JDK1.8中HashMap的底层实现,并比较一下二者的不同。 JDK1.7中的HashMapHashMap是我们很常用的集合框架,对它的用法我们都很熟悉。但是如果要更好的使用它,我们可能需要理解HashMap的内部实现,同时这也是面试比较常问的一个问题。下面的源码使用的是Java SE Development Kit 7u80,主要介绍下HashMap的底层存储结构,扩容机制和一些常用的方法。 JDK1.7中的HashMap的存储结构在JDk1.7中或者之前的一些版本中,HashMap的底层存储结构都是采用 ...
Read more »
1234…8
zhengrui

zhengrui

读书、健身、旅行

71 posts
15 categories
119 tags
RSS
GitHub Weibo Facebook
Links
  • 我康军的博客
  • 我的简历
© 2020 zhengrui
Powered by Hexo
Theme - NexT.Mist