没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1. 目录
1. 目录 ....................................................................................1
2. JVM ......................................................................................................................................................19
2.1. 线程 ...............................................................................2 0
2.2. JVM 内存区域 ......................................................................2 1
2.2.1.
程序计数器
(
线程私有
)...........................................................................................................22
2.2.2.
虚拟机栈
(
线程私有
)...............................................................................................................22
2.2.3.
本地方法区
(
线程私有
)...........................................................................................................2 3
2.2.4.
堆(
Heap-
线程共享)
-
运行时数据区
...........................................2 3
2.2.5.
方法区
/
永久代(线程共享)
..................................................23
2.3. JVM 运行时内存 ....................................................................2 4
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、servicorFrom..................................................................................................................25
3:ServicorTo 和 ServicorFrom 互换 ........................................................25
2.3.2.
老年代
.....................................................................25
2.3.3.
永久代
.....................................................................25
2.3.3.1. JAVA8 与元数据........................................................................................................................................25
2.4. 垃圾回收与算法 ....................................................................2 6
2.4.1.
如何确定垃圾
...............................................................2 6
2.4.1.1. 引用计数法 ........................................................................26
2.4.1.2. 可达性分析 ........................................................................26
2.4.2.
标记清除算法(Mark-Sweep)
...............................................2 7
2.4.3.
复制算法(
copying
)
........................................................2 7
2.4.4.
标记整理算法
(Mark-Compact) .............................................................................................28
2.4.5.
分代收集算法
...............................................................2 9
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 分区收集算法 ...................................................3 0
2.6.1.
分代收集算法
...............................................................3 0
2.6.1.1. 在新生代-复制算法...................................................................................................................................30
2.6.1.2. 在老年代-标记整理算法...........................................................................................................................30
2.6.2.
分区收集算法
...............................................................3 1
2.7. GC 垃圾收集器 .....................................................................3 1
2.7.1. Serial
垃圾收集器(单线程、复制算法)
........................................31
2.7.2. ParNew
垃圾收集器(
Serial+
多线程)
.........................................31
2.7.3. Parallel Scavenge
收集器(多线程复制算法、高效)
.............................3 2
2.7.4. Serial Old
收集器(单线程标记整理算法)
.....................................32
2.7.5. Parallel
Old
收集器(多线程标记整理算法)
....................................33
2.7.6. CMS
收集器(多线程标记清除算法)
..........................................3 3
2.7.6.1. 初始标记 .....................................................................................................................................................33
Page 2 of 283
13/04/2018
2.7.6.2. 并发标记 .....................................................................................................................................................34
2.7.6.3. 重新标记 .....................................................................................................................................................34
2.7.6.4. 并发清除 .....................................................................................................................................................34
2.7.7. G1
收集器
..................................................................34
2.8. JAVA IO/NIO ................................................................................................................................34
2.8.1.
阻塞
IO
模型
................................................................3 4
2.8.2.
非阻塞
IO
模型
..............................................................3 5
2.8.3.
多路复用
IO
模型
............................................................3 5
2.8.4.
信号驱动
IO
模型
............................................................3 6
2.8.5.
异步
IO
模型
................................................................3 6
2.8.1. JAVA IO
包
.................................................................3 6
2.8.2. JAVA
NIO .............................................................................................................................3 7
2.8.2.1. NIO 的缓冲区 ...........................................................................................................................................38
2.8.2.2. NIO 的非阻塞 ...........................................................................................................................................38
2.8.3. Channel ................................................................................................................................40
2.8.4. Buffer .....................................................................................................................................40
2.8.5. Selector .................................................................................................................................40
2.9. JVM 类加载机制 ....................................................................4 1
2.9.1.1. 加载 .............................................................................41
2.9.1.2. 验证 .............................................................................41
2.9.1.3. 准备 .............................................................................41
2.9.1.4. 解析 .............................................................................41
2.9.1.5. 符号引用 .....................................................................................................................................................42
2.9.1.6. 直接引用 .....................................................................................................................................................42
2.9.1.7. 初始化 ...........................................................................42
2.9.1.8. 类构造器<client>.....................................................................................................................................42
2.9.2.
类加载器
...................................................................42
2.9.2.1. 启动类加载器(Bootstrap
ClassLoader) .............................................................................................43
2.9.2.2. 扩展类加载器(Extension ClassLoader) ..............................................................................................43
2.9.2.3. 应用程序类加载器(Application ClassLoader): .............................................................................43
2.9.3.
双亲委派
...................................................................43
2.9.4. OSGI
(动态模型系统)
......................................................44
2.9.4.1. 动态改变构造 ............................................................................................................................................44
2.9.4.2. 模块化编程与热插拔 ................................................................................................................................44
3. JAVA 集合 .............................................................................45
3.1. 接口继承关系和实现 ................................................................4 5
3.2. LIST ..........................................................................................................................................................................47
3.2.1. ArrayList
(数组)
...........................................................4 7
3.2.2. Vector
(数组实现、线程同步)
...............................................4 7
3.2.3. LinkList
(链表)
............................................................4 7
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
3.4. MAP...........................................................................................................................................................................5 0
3.4.1. HashMap
(数组
+
链表
+
红黑树)
..............................................5 0
3.4.1.1. JAVA7 实现 .......................................................................50
3.4.1.2. JAVA8 实现 .......................................................................51
3.4.2. ConcurrentHashMap ............................................................................................................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
Page 3 of 283
13/04/2018
3.4.3. HashTable
(线程安全)
.....................................................53
3.4.4. TreeMap
(可排序)
.........................................................5 3
3.4.5. LinkHashMap
(记录插入顺序)
...............................................53
4. JAVA 多线程并发 .......................................................................54
4.1.1. JAVA
并发知识库
...........................................................54
4.1.2. JAVA
线程实现
/
创建方式
.....................................................5 4
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
种线程池
.................................................................5 6
4.1.3.1. newCachedThreadPool ..............................................................................................................57
4.1.3.2. newFixedThreadPool .................................................................................................................57
4.1.3.3. newScheduledThreadPool..........................................................................................................58
4.1.3.4. newSingleThreadExecutor ......................................................................................................................58
4.1.4.
线程生命周期
(
状态
)...............................................................................................................58
4.1.4.1. 新建状态(NEW) .................................................................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
种方式
...........................................................6 0
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. sleep
与
wait
区别
...........................................................6 1
4.1.7. start
与
run
区别
.............................................................6 2
4.1.8. JAVA
后台线程
.............................................................6 2
4.1.9. 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
Page 4 of 283
13/04/2018
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. 重量级锁(Mutex
Lock) ........................................................71
4.1.9.13. 轻量级锁 .......................................................................71
锁升级...................................................................................71
4.1.9.14. 偏向锁 ..........................................................................71
4.1.9.15. 分段锁 ..........................................................................71
4.1.9.16. 锁优化 ..........................................................................71
减少锁持有时间...........................................................................72
减小锁粒度...............................................................................72
锁分离...................................................................................72
锁粗化...................................................................................72
锁消除...................................................................................72
4.1.10.
线程基本方法
...............................................................7 2
4.1.10.1. 线程等待(wait) ................................................................73
4.1.10.2. 线程睡眠(sleep) ...............................................................73
4.1.10.3. 线程让步(yield) ...............................................................73
4.1.10.4. 线程中断(interrupt) ............................................................73
4.1.10.5. Join 等待其他线程终止 ...........................................................74
4.1.10.6. 为什么要用 join()方法? ..........................................................74
4.1.10.7. 线程唤醒(notify) ...............................................................74
4.1.10.8. 其他方法: .....................................................................74
4.1.11.
线程上下文切换
.............................................................7 5
4.1.11.1. 进程 ............................................................................75
4.1.11.2. 上下文 ..........................................................................75
4.1.11.3. 寄存器 ..........................................................................75
4.1.11.4. 程序计数器 .....................................................................75
4.1.11.5. PCB-“切换桢” .................................................................75
4.1.11.6. 上下文切换的活动: .............................................................76
4.1.11.7. 引起线程上下文切换的原因 .......................................................76
4.1.12.
同步锁与死锁
...............................................................7 6
4.1.12.1. 同步锁..........................................................................76
4.1.12.2. 死锁 ............................................................................76
4.1.13.
线程池原理
.................................................................7 6
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
Page 5 of 283
13/04/2018
4.1.14.9. LinkedBlockingDeque ...........................................................................................................................83
4.1. 15. CyclicBarrier
、
CountDownLatch
、
Semaphore
的用法
...........................8 4
4.1.15.1. CountDownLatch(线程计数器
) ....................................................................................................84
4.1.15.2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) .................................................84
4.1.15.3. Semaphore(信号量-控制同时访问的线程个数) ..........................................................................85
4.1.16. volatile
关键字的作用(变量可见性、禁止重排序)
..............................8 7
变量可见性...............................................................................87
禁止重排序...............................................................................87
比 sychronized 更轻量级的同步锁 ...........................................................87
适用场景.................................................................................87
4.1.17.
如何在两个线程之间共享数据
.................................................88
将数据抽象成一个类,并将数据的操作作为这个类的方法 .......................................88
Runnable 对象作为一个类的内部类 .........................................................89
4.1.18. ThreadLocal
作用(线程本地存储)
............................................9 0
ThreadLocalMap(线程的一个属性) .......................................................90
使用场景.................................................................................91
4.1. 19. synchronized
和
ReentrantLock
的区别
.........................................91
4.1.19.1. 两者的共同点: ........................................................................................................................................91
4.1.19.2. 两者的不同点: ........................................................................................................................................92
4.1.20. ConcurrentHashMap
并发
....................................................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.
进程调度算法
...............................................................9 4
4.1.22.1. 优先调度算法 ............................................................................................................................................94
4.1.22.2. 高优先权优先调度算法 ...........................................................................................................................95
4.1.22.3. 基于时间片的轮转调度算法 ...................................................................................................................96
4.1.23.
什么是
CAS
(比较并交换-乐观锁机制-锁自旋)
.................................9 6
4.1.23.1. 概念及特性 ................................................................................................................................................96
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋) ..............................................................................97
4.1.23.3. ABA 问题 ....................................................................................................................................................98
4.1.24.
什么是
AQS
(抽象的队列同步器)
............................................9 8
Exclusive 独占资源-ReentrantLock ........................................................................................................99
Share 共享资源-Semaphore/CountDownLatch ......................................................................................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
剩余282页未读,继续阅读
资源评论
千源万码
- 粉丝: 763
- 资源: 368
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
- MyBatis动态SQL.pdf
- 基于stm32单片机protues仿真的温湿度控制系统设计(仿真图、源代码)
- 词向量:自然语言处理的基石
- mybatis动态sql
- 40G微信小程序开发教程(工具插件+视频教程)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功