没有合适的资源?快使用搜索试试~ 我知道了~
JAVA核心知识点整理
资源推荐
资源详情
资源评论
2.7.6.1. 初始标记 33
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、servicorFrom...............................................................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.45.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
13/04/2018 Page 2 of 283
2.7.4. Serial Old收集器(单线程标记整理算法)
..............................................32
2.7.5. Parallel Old收集器(多线程标记整理算法)
............................................33
2.7.6. CMS收集器(多线程标记清除算法)
.....................................................33
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. 阻塞I。模型 .........................................................................34
2.8.2. 非阻塞Q 模型 ........................................................................35
2.8.3. 多路复用I。模型 .....................................................................35
2.8.4. 信号驱动模型 ........................................................................36
2.8.5. 异步I。模型 .........................................................................36
2.8.1. JAVA 10 ............................................................................36
2.8.2. JAVA NIO ............................................................................37
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类加载机制.................................................................................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. 瞧弓 I 用 ............................................................................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.S. 应用制口载器(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. 接口继承关系和实现 ............................................................................45
3.2. LIST ....................................................................................47
3.2.1. ArrayList (数组) ..................................................................47
3.2.2. Vector (数组实现、线程同步) .......................................................47
3.2.3. LinkList (链表) ...................................................................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
3.4. MAP ....................................................................................50
3.4.1. HashMap (数组+链表+红黑树) ........................................................50
3.4.1.1. JAVA7 实现 ...........................................................................50
13/04/2018 Page 3 of 283
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
3.4.3. HashTable (线程安全) .............................................................53
3.4.4. TreeMap (可排序) .................................................................53
3.4.5. LinkHashMap (记录插入顺序) .......................................................53
4. JAVA多线程并发.......................................................................54
4.1.1. JAVA并发知识库 .....................................................................54
4.1.2. 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
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种方式 ....................................................................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. sleep 与 wait 区另U. ...............................................................61
4.1.7. start 与 run 区另U .................................................................62
4.1.8. JAVA 后台线程 ......................................................................62
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类锁方法区另U区另U ....................................................68
13/04/2018 Page 4 of 283
tryLock和 lock和 locklnterruptibly 的区另ll ..............................................68
4.1.9.6. Semaphore 信号量 ......................................................................68
实现互斥锁(计数器为1) ..................................................................68
代码实现 ......................................................................................68
Semaphore 与 ReentrantLock ...............................................................69
4.1.9.7. Atomiclnteger .....................................................................69
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. 线程基本方法
........................................................................72
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. 线程上下文切换
......................................................................75
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. 同步锁与死锁 ........................................................................76
4.1.12.1. 同步锁 ..............................................................................76
4.1.12.2. 死锁 ................................................................................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. JA VA阻塞队列原理.
..................................................................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
13/04/2018 Page 5 of 283
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
4.1.14.9. Linked Blocking Deque ...........................................................83
4.1.15. CyclicBarrier^ 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. ThreadLocal作用(线程本地存储) .....................................................90
ThreadLocalMap (线程的一个属性) ............................................................90
使用场景 ......................................................................................91
4.1.19. synchronized 和 ReentrantLock 的区另U ...............................................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. 进程调度算法 ........................................................................94
4.1.22.1. 优先调度算法 ........................................................................94
4.1.22.2. 高优先权优先调度算法 ................................................................95
4.1.22.3. 基于时间片的轮转调度算法 ............................................................96
4.1.23. 什么是CAS (I:嚴并交换-乐观锁机制-锁自旋) .........................................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 独占资源-ReentrantLock .........................................................99
Share 共享资源-Semaphore/CountDownLatch ..................................................99
同步器的实现是ABS核心(state资源状态计数) ..................................................100
ReentrantReadWriteLock实现独占和共享两种方式................................................100
5. JAVA 基础 .........................................................................101
5.1.1. JA VA异常分类及处理. ...............................................................101
5.1.1.1. 概念 ...............................................................................101
5.1.1.2. 异常分类 ...........................................................................101
剩余279页未读,继续阅读
资源评论
蚁库
- 粉丝: 31
- 资源: 99
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功