jdk源码分析--0.阅读建议

本文深入剖析了Java标准库中的关键类,从java.lang到java.util.concurrent,详细讲解了如Object、String、HashMap、ConcurrentHashMap等核心类的内部结构与工作原理。

本文转载自 https://blog.youkuaiyun.com/qq_21033663/article/details/79571506

标题为包名,后面序号为优先级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实现

构建进程终止异常: C:\Users\xxzxhn\.jdks\openjdk-21.0.2\bin\java.exe -Xmx700m -Djava.awt.headless=true "-Djna.boot.library.path=D:\IDEA\IntelliJ IDEA 2024.1.4/lib/jna/amd64" -Djna.nosys=true -Djna.noclasspath=true --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -Dpreload.project.path=C:/Users/xxzxhn/IdeaProjects/InterfaceDemo -Dpreload.config.path=C:/Users/xxzxhn/AppData/Roaming/JetBrains/IntelliJIdea2024.1/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Didea.IntToIntBtree.page.size=32768 -Djdt.compiler.useSingleThread=true -Daether.connector.resumeDownloads=false -Dio.netty.initialSeedUniquifier=1609067845224991422 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2024.1 -Djps.language.bundle=C:/Users/xxzxhn/AppData/Roaming/JetBrains/IntelliJIdea2024.1/plugins/zh.241.271/lib/zh.241.271.jar "-Didea.home.path=D:/IDEA/IntelliJ IDEA 2024.1.4" -Didea.config.path=C:/Users/xxzxhn/AppData/Roaming/JetBrains/IntelliJIdea2024.1 -Didea.plugins.path=C:/Users/xxzxhn/AppData/Roaming/JetBrains/IntelliJIdea2024.1/plugins -Djps.log.dir=C:/Users/xxzxhn/AppData/Local/JetBrains/IntelliJIdea2024.1/log/build-log "-Djps.fallback.jdk.home=D:/IDEA/IntelliJ IDEA 2024.1.4/jbr" -Djps.fallback.jdk.version=17.0.11 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/xxzxhn/AppData/Local/JetBrains/IntelliJIdea2024.1/compile-server/interfacedemo_a13bff99/_temp_ -Djps.backward.ref.index.builder=true -Djps.backward.ref.index.builder.fs.case.sensitive=false "-Djps.kotlin.home=D:\IDEA\IntelliJ IDEA 2024.1.4\plugins\Kotlin\kotlinc" -Dkotlin.incremental.compilation=true -Dkotlin.incremental.compilation.js=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=\"C:\Users\xxzxhn\AppData\Local\Temp\kotlin-idea-11542373924410988576-is-running\" -Dide.propagate.context=false -classpath "D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/jps-launcher.jar" org.jetbrains.jps.cmdline.Launcher "D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/jps-builders.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/jps-builders-6.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/jps-javac-extension.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/util-8.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/util_rt.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/platform-loader.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/annotations.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/trove.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/jetbrains.kotlinx.metadata.jvm.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/protobuf.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/jps-model.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/javac2.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/forms_rt.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/util.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/aether-dependency-resolver.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/maven-resolver-connector-basic.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/maven-resolver-transport-file.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/java/lib/maven-resolver-transport-http.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/idea_rt.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/JavaEE/lib/jasper-v2-rt.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/lib/util-8.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/eclipse/lib/eclipse-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/eclipse/lib/eclipse-common.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/JavaEE/lib/javaee-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/uiDesigner/lib/jps/java-guiForms-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/platform-langInjection/lib/java-langInjection-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/javaFX/lib/javaFX-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/javaFX/lib/javaFX-common.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/Groovy/lib/groovy-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/Groovy/lib/groovy-constants-rt.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/maven/lib/maven-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/gradle-java/lib/gradle-jps.jar;D:/IDEA/IntelliJ IDEA 2024.1.4/plugins/JPA/lib/jps/javaee-jpa-jps.jar" org.jetbrains.jps.cmdline.BuildMain 127.0.0.1 55706 15d6a506-8ab5-4ff3-a6a9-0df58f4651c6 C:/Users/xxzxhn/AppData/Local/JetBrains/IntelliJIdea2024.1/compile-server Error occurred during initialization of VM Failed setting boot class path.
最新发布
08-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值