jdk源码分析总览

作者: cb9841112785 | 来源:发表于2018-07-01 22:06 被阅读254次

    今天看到了一个源码分析按照重要性排序的例子, 这里拿过来用了,之后按照这个顺序不断的完善源码的内容。

    引用的出处忘记了(对作者说声抱歉)

    很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为整理的通常所需阅读的源码范围。

    标题为包名,后面序号为优先级1-4,优先级递减

    1、java.lang

    1) Object 1

    2) String 1

    3) AbstractStringBuilder 1

    4) StringBuffer 1

    5) StringBuilder 1

    6) Boolean 2

    7) Byte 2

    8) Double 2

    9) Float 2

    10) Integer 2

    11) Long 2

    12) Short 2

    13) Thread 2

    14) ThreadLocal 2

    15) Enum 3

    16) Throwable 3

    17) Error 3

    18) Exception 3

    19) Class 4

    20) ClassLoader 4

    21) Compiler 4

    22) System 4

    23) Package 4

    24) Void 4

    2、java.util

    1) AbstractList 1

    2) AbstractMap 1

    3) AbstractSet 1

    4) ArrayList 1

    5) LinkedList 1

    6) HashMap 1

    7) Hashtable 1

    8) HashSet 1

    9) LinkedHashMap 1

    10) LinkedHashSet 1

    11) TreeMap 1

    12) TreeSet 1

    13) Vector 2

    14) Queue 2

    15) Stack 2

    16) SortedMap 2

    17) SortedSet 2

    18) Collections 3

    19) Arrays 3

    20) Comparator 3

    21) Iterator 3

    22) Base64 4

    23) Date 4

    24) EventListener 4

    25) Random 4

    26) SubList 4

    27) Timer 4

    28) UUID 4

    29) WeakHashMap 4

    3、java.util.concurrent

    1) ConcurrentHashMap 1

    2) Executor 2

    3) AbstractExecutorService 2

    4) ExecutorService 2

    5) ThreadPoolExecutor 2

    6) BlockingQueue 2

    7)AbstractQueuedSynchronizer 2

    8)CountDownLatch 2

    9) FutureTask 2

    10)Semaphore 2

    11)CyclicBarrier 2

    13)CopyOnWriteArrayList 3

    14)SynchronousQueue 3

    15)BlockingDeque 3

    16) Callable 4

    4、java.util.concurrent.atomic

    1) AtomicBoolean 2

    2) AtomicInteger 2

    3) AtomicLong 2

    4) AtomicReference 3

    5、java.lang.reflect

    1) Field 2

    2) Method 2

    6、java.lang.annotation

    1) Annotation 3

    2) Target 3

    3) Inherited 3

    4) Retention 3

    5) Documented 4

    6) ElementType 4

    7) Native 4

    8) Repeatable 4

    7、java.util.concurrent.locks

    1) Lock 2

    2) Condition 2

    3) ReentrantLock 2

    4) ReentrantReadWriteLock 2

    8、java.io

    1) File 3

    2) InputStream 3

    3) OutputStream 3

    4) Reader 4

    5) Writer 4

    9、java.nio

    1) Buffer 3

    2) ByteBuffer 4

    3) CharBuffer 4

    4) DoubleBuffer 4

    5) FloatBuffer 4

    6) IntBuffer 4

    7) LongBuffer 4

    8) ShortBuffer 4

    10、java.sql

    1) Connection 3

    2) Driver 3

    3) DriverManager 3

    4) JDBCType 3

    5) ResultSet 4

    6) Statement 4

    11、java.net

    1) Socket 3

    2) ServerSocket 3

    3) URI 4

    4) URL 4

    5) URLEncoder 4

    阅读笔记简版

    1、Object

    1) wait(), notify(), notifyAll(), wait(timeout)

    2) hashCode(), equals()

    3) clone()

    2、String

    1) char[] value

    2) int hash

    3) equals(), startWith(), endWith(), replace

    3、AbstractStringBuilder

    1) char[] value

    2) int count

    3) 扩容:翻倍,不够取所需最小

    4、StringBuffer

    1) 继承AbstractStringBuilder

    2) synchronized方法保证线程安全

    3) char[] toStringCache

    5、StringBuilder 继承AbstractStringBuilder

    6、ArrayList

    1) Object[] elementData

    2) int size

    3) 默认大小10

    4) 扩容:翻倍,不够取所需最小

    7、LinkedList

    1) Node {E item, Node prev, Node next}

    2) int size

    3) Node first

    4) Node last

    5) linkFirst(), linkLast(), linkBefore(), unLinkFirst(), unLinkLast(), unLink(), indexOf()

    8、HashMap

    1) Node{int hash, K key, V value, Node next}

    2) 默认容量16,负载因子0.75f

    3) int size, modCount, threshold, float loadFactor

    4) Node[] table

    5) Set entrySet

    6) put():根据key算hash,根据容量和hash算index,table[index]没有直接添加到数组中,table[index]有,若index位置同一个key则更新,否则遍历next是否有,有则更新,无则新增,最后根据thread与size判断是否扩容。注:扩容时容量翻倍,重新算hash复制到新数组

    7)get()类似

    注:先比较hash,若相等在比较equals

    9、Hashtable

    1) 结构实现与HashMap基本一致

    2)通过synchronized方法保证线程安全

    10、HashSet:委托给HashMap,其Value是同一个默认对象

    11、LinkedHashMap继承HashMap

    1) Entry{HashMap.Node, Entry before, after}

    2) Entry head, tail

    3) 重写newNode()添加节点时,除像HashMap中添加外,保存before、after信息

    12、LinkedHashSet继承HashSet:不知道如何实现的顺序?

    13、AbstractMap维护EntrySet,AbstractSet维护Iterator,AbstractList维护Iterator

    14、ConcurrentHashMap

    1) JDK1.7及以前:

    a、Segment[] ,HashEntry[] , HashEntry{hash, k, v, next}

    b、根据key算hash,根据hash和Segment的大小算位置,每个segment拥有一个自己的HashEntry[]

    c、get():不加锁,volatile类型

    d、put(): 对相应segment加锁

    e、size():各HashEntry[] 之和,先不加锁算两遍,若一致则返回,若不一致则加锁重新计算

    2)JDK1.8

    a、Node{hash, key, value, next}

    b、Node[] table

    c、大多数操作类似于HashMap,不同CAS方式设置,根据key算hash,在根据hash和容量算index,对table[index]加锁,从而达到更大的并发量

    d、get(): 同HashMap

    e、put(): 对table[index]加锁

    15、TreeMap

    1)红黑树,即自平衡二叉查找树,时间复杂度O(logn)

    2)Entry{K k, V v, Entry parent, left, right, boolean color}

    3)Entry root,int size, int modeCount

    16、TreeSet:委托TreeMap实现

    {附}:大家可以点击加入群:【java高级架构进阶】:https://jq.qq.com/?_wv=1027&k=575y0Kj里面有Java高级大牛直播讲解知识点 走的就是高端路线(如果你想跳槽换工作 但是技术又不够 或者工作上遇到了瓶颈 我这里有一个JAVA的免费直播课程 讲的是高端的知识点基础不好的误入哟 只要你有1-5年的开发经验可以加群找我要课堂链接 注意:是免费的 没有开发经验误入哦)

    相关文章

      网友评论

        本文标题:jdk源码分析总览

        本文链接:https://www.haomeiwen.com/subject/bgbhuftx.html