JDK源码阅读顺序

很多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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4、java.util.concurrent.atomic

1) AtomicBoolean 2
2) AtomicInteger 2
3) AtomicLong 2
4) AtomicReference 3
  • 1
  • 2
  • 3
  • 4
  • 5

5、java.lang.reflect

1) Field 2
2) Method 2
  • 1
  • 2
  • 3

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

7、java.util.concurrent.locks

1) Lock 2
2) Condition 2
3) ReentrantLock 2
4) ReentrantReadWriteLock 2
  • 1
  • 2
  • 3
  • 4
  • 5

8、java.io

1) File 3
2) InputStream   3
3) OutputStream  3
4) Reader  4
5) Writer  4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

10、java.sql

1) Connection 3
2) Driver 3
3) DriverManager 3
4) JDBCType 3
5) ResultSet 4
6) Statement 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

11、java.net

1) Socket 3
2) ServerSocket 3
3) URI 4
4) URL 4
5) URLEncoder 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

阅读笔记简版

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实现

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JDK(Java Development Kit)是Java开发工具包的缩写,它提供了开发和运行Java程序所需的各种工具和库。JDK由Oracle公司开发和维护,版本号通常按照从旧到新的顺序进行编号。 JDK 8是Java SE 8(Java平台标准版8)的开发工具包。它于2014年发布,带来了许多重要的新特性和改进。其中最显著的是Lambda表达式和函数式接口的引入,这使得Java程序能够更容易地编写函数式风格的代码。此外,JDK 8还引入了新的日期和时间API、新的并发API等,这些都大大提高了Java的开发效率和性能。 JDK 11是Java SE 11的开发工具包,于2018年发布。相较于JDK 8,JDK 11带来了更多的新特性和改进。其中包括局部变量类型推断、垃圾回收器的改进、HTTP客户端API的引入等。此外,JDK 11还包括了对一些不再维护的功能的删除,这意味着一些旧的或已被弃用的功能在JDK 11中将不再受支持。 JDK 14是Java SE 14的开发工具包,于2020年发布。它引入了很多新的特性,如Switch表达式、Records(记录类型)、Pattern Matching等。这些新特性进一步提高了Java的语法灵活性和代码的可读性。JDK 14还提供了其他一些改进,如对垃圾回收器的优化、对代码编译效率的改进等。 总的来说,JDK 8、JDK 11和JDK 14都是Java开发工具包的不同版本。它们每个版本都带来了新的特性和改进,使得Java开发变得更加高效和便捷。开发人员可以根据自己的需求选择适合的JDK版本来进行Java开发。 ### 回答2: JDK是Java开发工具包(Java Development Kit)的缩写,是Java程序开发所必需的软件包。JDK包含了Java编译器、Java虚拟机(JVM)和Java运行时环境(JRE)等工具。 JDK 8是Java Development Kit的第8个主要版本。它于2014年3月18日发布,其中包含了许多新的特性和改进。其中最重要的特性是Lambda表达式、函数式接口、Stream API和新的日期/时间API等。这些特性使得代码编写更简洁、可读性更高,同时也提供了更好的并发性能和更强大的函数式编程能力。 JDK 11是Java Development Kit的第11个主要版本,于2018年9月25日发布。它带来了许多新功能和改进,其中包括支持HTTP/2和WebSockets的新的标准HTTP客户端API、支持单文件源代码运行的Java模块系统、Epsilon垃圾收集器以及JEP 335-更简化的标记-清除垃圾收集器界面等。此外,JDK 11也是长期支持(LTS)版本,提供长期的安全和维护更新。 JDK 14是Java Development Kit的第14个主要版本,于2020年3月17日发布。它引入了一些令人激动的新功能,例如Switch表达式、记录(Records)和Pattern Matching for instanceof等语言层面的改进。此外,JDK 14还包含了新的垃圾收集器(ZGC)、即时编译器(JVMCI)和移动性框架(Project Panama)等改进。 无论是JDK 8、JDK 11还是JDK 14,它们都是Java开发的重要版本,每个版本都带来了新的特性和改进,为开发者提供了更强大、更灵活的开发工具和功能。开发者根据自己的需求和项目要求选择合适的JDK版本,以获得更好的性能和开发体验。 ### 回答3: JDK是Java Development Kit(Java开发工具包)的缩写,比如JDK8、JDK11和JDK14是Java平台上不同版本的开发工具包。 JDK8是Java平台最早发布的较大版本之一,于2014年发布。它引入了许多重大的新功能和改进,包括Lambda表达式、函数式接口、默认方法、流API、新的日期和时间API等。JDK8还增加了对JavaFX的支持,并提供了更好的性能和安全性。 JDK11是JDK的下一个重要版本,于2018年发布。它包含了一些重要的更新,例如模块化系统(Project Jigsaw)的最终实现,使得Java平台更加模块化和安全。JDK11还提供了一些性能改进、新的API和工具,包括HTTP客户端API、JEP 181垃圾回收器接口、启动时间改进等。 JDK14是JDK的最新版本,于2020年发布。它继续提供了一些新增功能和增强功能。其中最显著的新功能是JEP 361:Switch表达式,这是对Switch语句的扩展,使得代码更加简洁和易读。JDK14还引入了其他一些实验性功能,如JEP 359:Record类、JEP 305:Pattern Matching for instanceof等。 总的来说,JDK的不同版本都带来了一些新的功能和改进,以满足开发者的需求并提升开发效率。选择使用哪个版本的JDK取决于开发者的具体需求和项目要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值