java异常
- what 什么被抛出
- where 堆栈跟踪
- why 为什么被抛出
String Buffer
Error Exception区别
- Error 程序无法处理的系统错误 编译器不做检查
- Exception 程序可以处理的异常,捕获后可以恢复
- 总结 前者是程序无法处理,后者可以处理
RuntimeException 不可预知,程序应当自行避免
非RuntimeException 可以预知的,程序可以避免 编译器校验 Ioexp
error jvm责任
runtimeexception 程序的责任
checked exception 可检查异常java编译器负责的责任
常见Error Exception
- 空指针
- 类型强制转换
- 传递非法参数
- 下表越界
- 数字格式异常
非RuntimeException
- 找不到class
- io异常
Error
- 找不到class
- 深度递归暴栈
java异常处理机制
- 抛出异常 创建异常对象,交给运行时系统处理
- 捕获异常 寻找合适异常处理器处理,否则异常中止
高校主流异常处理框架
- 设计一个通用的继承自RuntimeException异常处理
- 其他异常统一翻译为这一异常Application
- catch后,抛出上述异常子类,提供重组足以定位的信息
- 前端接收Application 统一处理
try catch
- 影响jvm优化
- 异常对象实例需要保存栈的快照信息,开销大
Java集合框架
Collection
- list
- 有序
- 重复
- 索引操作
- 分类
- 数组 查询快 增删慢 ArrayList
- 链表 查询慢 增删快 LinkedLIst
- set
- 无顺序
- 不重复
- 分类
- 低层哈系表 HashSet
- 元素唯一性 hashCode() equal
- 低层二叉树
- TreeSet
- 元素排序 自然排序 对象类实现comparable接口 无参构造
- 比较接口comparator 带参构造
- 低层哈系表 HashSet
Map kv结构
HashMap HashTable ConccurentHashMap
HashMap java8以前 数组加链表 数组默认16 性能会恶化
HashMap 数组链表 红黑树
HashMap put方法逻辑
- HashMap 未被初始化,初始化
- key球Hash值,再计算下标
- 没有碰撞,直接放桶
- 碰撞 拉链
- 链表过长,红黑树
- 链表短 链表
- 节点存在 替换
- 桶满了 resize
减少碰撞
- 扰动函数 元素位置均匀
- final对象 采用合适equals() hashCode()
HashMap扩容
- 多线程环境下 条件竞争 死锁
- rehashing 耗时
加锁 效率低下
ConccurentHashMap
- 锁的粒度细化
- 分段锁 segment 16 数组分为16个子数组 不是一个子数组就可以并行
- java8 cas + synchronized 红黑树
ConccrentHashMap put方法逻辑
- HashMap 未被初始化,初始化
- hash定位索引,是否有node节点,没有则cas添加,添加失败,下次循环
- 检查到内部正在扩容,
- f!=null synchronized锁住f
- 链表就链表添加
- 树就树添加
- 判断长度是否到达临界需要调整
concurrenthashMap 比起segment锁拆分更细
- 无锁操作cas插入头节点
- 头节点存在,获取同步锁
hashMap 线程不安全
Hashtable 线程安全 锁住整个对象
con 线程安全 cas 同步锁
hashmap key value 都可以null其他的不行
Juc 并发编程方案
cas aqs
分类
- 线程执行器
- 锁
- 原子变量类
- 并发工具
- 并发集合
并发工具类
- 闭锁
- 珊栏
- 信号量
- 交换器
事件 主线程等待一组时间后继续执行
cyclicBarrier阻塞当前线程,等待其他线程
exchanger 线程到达同步点 交换数据
阻塞队列
java io机制
BIO NIO AIO
BIO input output reader writer
- 系统调用
- 等待
- 数据从内核复制到用户空间
- 程序可以使用数据
NIO 复用 同步非阻塞的io
线程没有阻塞 自旋 轮训
Channel
Buffer
Selector
Channel buffer
select 最大连接数 FD_SETSIZE 32*64 性能一般
poll 与select区别不大但是没有最大连接数限制
epoll
消息传递
- select 内核赋值,需要拷贝
- poll 一样
- epoll 共享内存 性能高
aio异步模型
- 基于回调
- 返回Future
BIO 阻塞同步 1 1 简单 吞吐量低
NIO 非阻塞 同步 1 N 复杂 高
AIO 非阻塞异步 0 N 复杂 高