
1.
目录
1.
目录
......................................................................................................................................................... 1
2.
JVM ....................................................................................................................................................... 19
2.1.
线程 ...................................................................................................................................................... 20
2.2.
JVM 内存区域 ..................................................................................................................................... 21
2.2.1.
程序计数器
(
线程私有
)
................................................................................................................ 22
2.2.2.
虚拟机栈
(
线程私有
)
.................................................................................................................... 22
2.2.3.
本地方法区
(
线程私有
)
................................................................................................................ 23
2.2.4.
堆(
Heap-
线程共享)
-
运行时数据区
......................................................................................
23
2.2.5.
方法区
/
永久代(线程共享)
.....................................................................................................
23
2.3.
JVM 运行时内存 ................................................................................................................................. 24
2.3.1.
新生代
.......................................................................................................................................... 24
2.3.1.1.
Eden
区 .................................................................................................................................................... 24
2.3.1.2.
ServivorFrom
........................................................................................................................................... 24
2.3.1.3.
ServivorTo .............................................................................................................................................. 24
2.3.1.4.
MinorGC
的过程(复制->
清空->
互换) ....................................................................................... 24
1
:
eden
、servicorFrom
复制到 ServicorTo,年龄+1 ................................................................................... 25
2
:清空 eden
、se
rvicorFrom
............................................................................................................................. 25
3
:ServicorTo
和 ServicorFrom
互换 ................................................................................................................ 25
2.3.2.
老年代
.......................................................................................................................................... 25
2.3.3.
永久代
.......................................................................................................................................... 25
2.3.3.1.
JAVA8
与元数据 ................................................................................................................................. 25
2.4.
垃圾回收与算法 .................................................................................................................................. 26
2.4.1.
如何确定垃圾
..............................................................................................................................
26
2.4.1.1.
引用计数法............................................................................................................................................... 26
2.4.1.2.
可达性分析............................................................................................................................................... 26
2.4.2.
标记清除算法(
Mark-Sweep)
..............................................................................................
27
2.4.3.
复制算法(
copying
)
................................................................................................................. 27
2.4.4.
标记整理算法
(Mark
-Compact)
.................................................................................................. 28
2.4.5.
分代收集算法
..............................................................................................................................
29
2.4.5.1.
新生代与复制算法 .............................................................................................................................. 29
2.4.5.2.
老年代与标记复制算法 ...................................................................................................................... 29
2.5.
JAVA 四中引用类型 ........................................................................................................................... 30
2.5.1.
强引用
.......................................................................................................................................... 30
2.5.2.
软引用
.......................................................................................................................................... 30
2.5.3.
弱引用
.......................................................................................................................................... 30
2.5.4.
虚引用
.......................................................................................................................................... 30
2.6.
GC 分代收集算法 VS 分区收集算法 ................................................................................................ 30
2.6.1.
分代收集算法
..............................................................................................................................
30
2.6.1.1.
在新生代-
复制算法 ............................................................................................................................. 30
2.6.1.2.
在老年代-
标记整理算法 ..................................................................................................................... 30
2.6.2.
分区收集算法
..............................................................................................................................
31
2.7.
GC 垃圾收集器 ................................................................................................................................... 31
2.7.1.
Serial
垃圾收集器(单线
程、复制算
法)
................................................................................ 31
2.7.2.
ParNew
垃圾收集器(
Serial+
多线程)
................................................................................... 31
2.7.3.
Parallel Scavenge
收集器(多线程
复制算法、高
效)
.......................................................... 32
2.7.4.
Serial Old
收集器(单线程
标记整理算法
)
........................................................................... 32
2.7.5.
Parallel Old
收集器(多线程标记整
理算法)
......................................................................... 33
2.7.6.
CMS
收集器(多线程标
记清除算法
)
..................................................................................... 33
2.7.6.1.
初始标记 .............................................................................................................................................. 33
13/0
1/20
22
Page 2
of 283
2.7.6.2.
2.7.6.3.
并发标记
..............................................................................................................................................34
重新标记
..............................................................................................................................................34
并发清除
..............................................................................................................................................34
2.7.6.4.
2.7.7.
G1
收集器
....................................................................................................................................
34
2.8.
JAVA
IO/NIO
....................................................................................................................................... 34
2.8.1.
2.8.2.
2.8.3.
2.8.4.
2.8.5.
2.8.1.
2.8.2.
阻塞
IO
模型
................................................................................................................................
34
非阻塞
IO
模型
............................................................................................................................
35
多路复用
IO
模型
........................................................................................................................
35
信号驱动
IO
模型
........................................................................................................................
36
异步
IO
模型
................................................................................................................................
36
JAVA IO
包
..................................................................................................................................
36
JAVA NIO
.................................................................................................................................... 37
NIO
的缓冲区 .....................................................................................................................................38
NIO
的非阻塞 .....................................................................................................................................38
Channel
....................................................................................................................................... 40
Buffer
............................................................................................................................................ 40
Selector
........................................................................................................................................ 40
2.8.2.1.
2.8.2.2.
2.8.3.
2.8.4.
2.8.5.
2.9.
JVM
类加载机制 ................................................................................................................................. 41
2.9.1.1.
加载 ..........................................................................................................................................................41
2.9.1.2.
验证 ..........................................................................................................................................................41
2.9.1.3.
准备 ..........................................................................................................................................................41
2.9.1.4.
解析 ..........................................................................................................................................................41
2.9.1.5.
2.9.1.6.
符号引用
..............................................................................................................................................42
直接引用
..............................................................................................................................................42
2.9.1.7.
初始化 ......................................................................................................................................................42
2.9.1.8.
2.9.2.
类构造器
<client>..............................................................................................................................42
类加载器
......................................................................................................................................
42
启动类加载器
(Bootstrap ClassLoader) .........................................................................................43
扩展类加载器
(Extension ClassLoader)..........................................................................................43
应用程序类加载器
(Application ClassLoader):
..........................................................................43
双亲委派
......................................................................................................................................
43
2.9.2.1.
2.9.2.2.
2.9.2.3.
2.9.3.
2.9.4. OSGI
(
动态模型系统
)
............................................................................................................
44
2.9.4.1.
2.9.4.2.
动态改变构造
......................................................................................................................................44
模块化编程与热插拔
..........................................................................................................................44
3.
JAVA
集合
............................................................................................................................................45
3.1.
3.2.
接口继承关系和实现
.......................................................................................................................... 45
L
IST
....................................................................................................................................................... 47
3.2.1.
3.2.2.
3.2.3.
ArrayList
(数组)
.......................................................................................................................
47
Vector
(数组实现、线
程同步)
...............................................................................................
47
LinkList
(链ŝjava基础283讲20;)
.........................................................................................................................
47
3.3.
SET ....................................................................................................................................................... 48
3.3.1.1.
HashSet
(Hash
表) .............................................................................................................................48
3.3.1.2.
TreeSet
(二叉树) ................................................................................................................................49
3.3.1.3.
LinkHashSet
(HashSet+LinkedHashMap) ...................................................................................49
M
AP
....................................................................................................................................................... 50
3.4.
3.4.1.
HashMap
(数组
+
链表
+
红黑树)
.............................................................................................
50
3.4.1.1.
JAVA7
实现 .............................................................................................................................................50
3.4.1.2.
JAVA8
实现 .............................................................................................................................................51
3.4.2.
ConcurrentHash
Map
.................................................................................................................. 51
3.4.2.1.
Segment
段..............................................................................................................................................51
3.4.2.2.
线程安全(Segment
继承 ReentrantLock
加锁) ..............................................................................51
3.4.2.3.
并行度(默认
16
) .................................................................................................................................52
3.4.2.4.
Java8
实现 (引入了红黑树) ..............................................................................................................52
13/01/2022
Page 3
of 283
3.4.3.
3.4.4.
3.4.5.
HashTable
(线程安全)
...........................................................................................................
53
TreeMap
(可排序)
..................................................................................................................
53
LinkHashMap
(记录插入顺
序)
..............................................................................................
53
4.
JAVA
多线程并发
.................................................................................................................................54
4.1.1.
4.1.2.
JAVA
并发知识库
.......................................................................................................................
54
JAVA
线程实现
/
创建方式
..........................................................................................................
54
4.1.2.1.
继承 Thread
类 ........................................................................................................................................54
4.1.2.2.
实现 Runnable
接口。............................................................................................................................54
4.1.2.3.
ExecutorService
、Callable<Class>
、Future
有返回值线程.............................................................55
4.1.2.4.
基于线程池的方式...................................................................................................................................56
4.1.3.
4
种线程池
...................................................................................................................................
56
newCachedThreadPool
.........................................................................................................................57
newFixedThreadPool
.............................................................................................................................57
4.1.3.1.
4.1.3.2.
4.1.3.3.
newScheduledThreadPool
....................................................................................................................58
4.1.3.4.
newSingleThreadExecutor .................................................................................................................58
4.1.4.
线程生命周期
(
状态
)
.................................................................................................................... 58
4.1.4.1.
新建状态(NE
W
) .................................................................................................................................58
4.1.4.2.
就绪状态(RUNNABLE
): .................................................................................................................59
4.1.4.3.
运行状态(RUNNING
): ....................................................................................................................59
4.1.4.4.
阻塞状态(BLOCKED
):....................................................................................................................59
等待阻塞(
o.wait->等待对列):
......................................................................................................................59
同步阻塞
(lock->锁池
) ..........................................................................................................................................59
其他阻塞
(sleep/join) ............................................................................................................................................59
4.1.4.5.
线程死亡(DEAD
)................................................................................................................................ 59
正常结束
................................................................................................................................................................59
异常结束
................................................................................................................................................................59
调用
stop...............................................................................................................................................................59
4.1.5.
终止线程
4
种方式
......................................................................................................................
60
4.1.5.1.
正常运行结束...........................................................................................................................................60
4.1.5.2.
使用退出标志退出线程...........................................................................................................................60
4.1.5.3.
Interrupt
方法结束线程...........................................................................................................................60
4.1.5.4.
stop
方法终止线程(线程不安全).......................................................................................................61
4.1.6.
4.1.7.
4.1.8.
4.1.9.
sleep
与
wait
区别
.......................................................................................................................
61
start
与
run
区别
..........................................................................................................................
62
JAVA
后台线程
...........................................................................................................................
62
JAVA
锁
.......................................................................................................................................
63
4.1.9.1.
乐观锁 ......................................................................................................................................................63
4.1.9.2.
悲观锁 ......................................................................................................................................................63
4.1.9.3.
自旋锁 ......................................................................................................................................................63
自旋锁的优缺点
....................................................................................................................................................63
自旋锁时间阈值(
1.6 引入了适应性自旋锁)
..................................................................................................63
自旋锁的开启
........................................................................................................................................................64
4.1.9.4.
Synchronized
同步锁..............................................................................................................................64
Synchronized
作用范围.......................................................................................................................................64
Synchronized
核心组件.......................................................................................................................................64
Synchronized
实现...............................................................................................................................................64
4.1.9.5.
ReentrantLock
.........................................................................................................................................66
Lock
接口的主要方法...........................................................................................................................................66
非公平锁
................................................................................................................................................................66
公平锁
....................................................................................................................................................................67
ReentrantLock
与 synchronized
........................................................................................................................67
ReentrantLock
实现 .............................................................................................................................................67
Condition
类和 Object
类锁方法区别区别 .........................................................................................................68
tryLock
和 lock
和 lockInterruptibly
的区别........................................................................................................68
4.1.9.6.
Semaphore
信号量 .................................................................................................................................68
实现互斥锁(计数器为
1)
.................................................................................................................................68
代码实现
................................................................................................................................................................68
Semaphore
与 ReentrantLock
...........................................................................................................................69
4.1.9.7.
AtomicInteger
..........................................................................................................................................69
13/01/2022
Page 4
of 283
4.1.9.8.
可重入锁(递归锁)...............................................................................................................................69
4.1.9.9.
公平锁与非公平锁...................................................................................................................................70
公平锁(
Fair)
.....................................................................................................................................................70
非公平锁(
Nonfair)
...........................................................................................................................................70
4.1.9.10.
ReadWriteLock
读写锁 ......................................................................................................................70
读锁........................................................................................................................................................................70
写锁
........................................................................................................................................................................70
4.1.9.11.
共享锁和独占锁 ..................................................................................................................................70
独占锁....................................................................................................................................................................70
共享锁....................................................................................................................................................................70
4.1.9.12.
4.1.9.13.
重量级锁(
Mutex Lock)
................................................................................................................71
轻量级锁
..............................................................................................................................................71
锁升级
....................................................................................................................................................................71
4.1.9.14.
4.1.9.15.
4.1.9.16.
偏向锁
..................................................................................................................................................71
分段锁
..................................................................................................................................................71
锁优化
..................................................................................................................................................71
减少锁持有时间....................................................................................................................................................72
减小锁粒度............................................................................................................................................................72
锁分离....................................................................................................................................................................72
锁粗化....................................................................................................................................................................72
锁消除
....................................................................................................................................................................72
4.1.10.
线程基本方法
..............................................................................................................................
72
4.1.10.1.
4.1.10.2.
4.1.10.3.
4.1.10.4.
4.1.10.5.
4.1.10.6.
4.1.10.7.
4.1.10.8.
线程等待(
wait)
............................................................................................................................... 73
线程睡眠(
sleep)
.............................................................................................................................73
线程让步(
yield)
..............................................................................................................................73
线程中断(
interrupt)
........................................................................................................................73
Join
等待其他线程终止 ......................................................................................................................74
为什么要用
join()方法?
....................................................................................................................74
线程唤醒(
notify)
.............................................................................................................................74
其他方法:
..........................................................................................................................................74
4.1.11.
线程上下文切换
..........................................................................................................................
75
4.1.11.1.
4.1.11.2.
4.1.11.3.
4.1.11.4.
4.1.11.5.
4.1.11.6.
4.1.11.7.
进程
......................................................................................................................................................75
上下文
..................................................................................................................................................75
寄存器
..................................................................................................................................................75
程序计数器
..........................................................................................................................................75
PCB-
“切换桢”.................................................................................................................................75
上下文切换的活动:
..........................................................................................................................76
引起线程上下文切换的原因
..............................................................................................................76
4.1.12.
同步锁与死锁
..............................................................................................................................
76
4.1.12.1.
4.1.12.2.
同步锁
..................................................................................................................................................76
死锁
......................................................................................................................................................76
4.1.13.
线程池原理
..................................................................................................................................
76
4.1.13.1. 线程复用..............................................................................................................................................76
4.1.13.2. 线程池的组成......................................................................................................................................76
4.1.13.3. 拒绝策略..............................................................................................................................................78
4.1.13.4.
Java
线程池工作过程 .........................................................................................................................78
4.1.14.
JAVA
阻塞队列原理
....................................................................................................................
79
4.1.14.1. 阻塞队列的主要方法 ..........................................................................................................................80
插入操作:............................................................................................................................................................80
获取数据操作:....................................................................................................................................................81
4.1.14.2. Java 中的阻塞队列 .............................................................................................................................81
4.1.14.3. ArrayBlockingQueue(公平、非公平) .......................................................................................82
4.1.14.4. LinkedBlockingQueue(两个独立锁提高并发) .........................................................................82
4.1.14.5. PriorityBlockingQueue(compareTo 排序实现优先)..............................................................82
4.1.14.6. DelayQueue(缓存失效、定时任务 )..........................................................................................82
4.1.14.7. SynchronousQueue(不存储数据、可用于传递数据)..............................................................83
4.1.14.8. LinkedTransferQueue......................................................................................................................83
13/01/2022
Page 5
of 283
4.1.14.9.
LinkedBlockingDeque
.....................................................................................................................83
4.1.15.
CyclicBarri
er
、
CountDownLatch
、
Semaphore
的用法
........................................................
84
4.1.15.1. CountDownLatch(线程计数器 ) ................................................................................................84
4.1.15.2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) ...............................................84
4.1.15.3.
Semaphore
(信号量-
控制同时访问的线程个数) .......................................................................85
4.1.16.
volatile
关键字的作用(
变量可见性
、禁止重排序
)
.............................................................
87
变量可见性
............................................................................................................................................................87
禁止重排序
............................................................................................................................................................87
比
sychronized 更轻量级的同
步锁
.....................................................................................................................87
适用场景
................................................................................................................................................................87
4.1.17.
如何在两个线程之间共
享数据
...................................................................................................
88
将数据抽象成一个类,并将数据的操作作为这个类的方法
.............................................................................88
Runnable
对象作为一个类的内部类 ..................................................................................................................89
4.1.18.
ThreadLoca
l
作用(
线程本地存储)
........................................................................................
90
ThreadLocalMap
(线程的一个属性) ..............................................................................................................90
使用场景
................................................................................................................................................................91
4.1.19.
synchroni
zed
和
Reentrant
Lock
的区别
..................................................................................
91
4.1.19.1. 两者的共同点: ..................................................................................................................................91
4.1.19.2.
两者的不同点: ..................................................................................................................................92
4.1.20.
ConcurrentH
ashMap
并发
.........................................................................................................
92
4.1.20.1. 减小锁粒度..........................................................................................................................................92
4.1.20.2.
ConcurrentHashMap
分段锁..........................................................................................................92
ConcurrentHashMap
是由 Segment
数组结构和 HashEntry
数组结构组成.................................................93
4.1.21.
Java
中用到的线程调度
.............................................................................................................
93
4.1.21.1. 抢占式调度:......................................................................................................................................93
4.1.21.2. 协同式调度:......................................................................................................................................93
4.1.21.3. JVM 的线程调度实现(抢占式调度) .............................................................................................94
4.1.21.4.
线程让出 cpu
的情况: .....................................................................................................................94
4.1.22.
进程调度算法
..............................................................................................................................
94
4.1.22.1. 优先调度算法......................................................................................................................................94
4.1.22.2. 高优先权优先调度算法 ......................................................................................................................95
4.1.22.3. 基于时间片的轮转调度算法 ..............................................................................................................96
4.1.23.
什么是
CAS
(
比较并交换-乐观锁机制-锁自旋)
..................................................................
96
4.1.23.1. 概念及特性..........................................................................................................................................96
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋) ...........................................................................97
4.1.23.3. ABA 问题.............................................................................................................................................98
4.1.24.
什么是
AQS
(
抽象的队列同步器
)
.........................................................................................
98
Exclusive
独占资源-Ree
ntrantLock
...................................................................................................................99
Share
共享资源-Semaphore/C
ountDownLatch
...............................................................................................99
同步器的实现是
ABS 核心(
state 资源状态计数)
.......................................................................................100
ReentrantReadWriteLock
实现独占和共享两种方式.....................................................................................100
5.
JAVA
基础
..........................................................................................................................................101
5.1.1.
JAVA
异常分类及处理
..............................................................................................................
101
5.1.1.1. 概念....................................................................................................................................................101
5.1.1.2.
异常分类............................................................................................................................................101
Error
.....................................................................................................................................................................101
Exception(RuntimeException、CheckedException) ...........................................................................101
5.1.1.3. 异常的处理方式 ................................................................................................................................102
遇到问题不进行具体处理,而是继续抛给调用者
(
throw,throws)
......................................................... 102
try catch
捕获异常针对性处理方式 ..................................................................................................................102
5.1.1.4. Throw 和 throws 的区别: ............................................................................................................102
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/5976.html