Java 复习
2022-05-06 16:37:30 0 举报
AI智能生成
Java 复习
作者其他创作
大纲/内容
JVM
类加载
加载
类加载器
bootstrap classloader
extension classloader
Application classloader
Userdefined classloader-e.g.字节码加密,需要在加载时解密
步骤
通过类的全限定名获取二进制字节流
将字节流代表的静态存储结构转化为方法区的运行时数据结构
java堆中生成java.lang.class对象
加载方式
命令行启动时,jvm初始化加载
Class.forName(classname)动态加载
ClassLoader.loadClass(classname) 动态加载
链接
验证
准备
为静态变量分配内存,初始化为默认值(0,0L,null,false) 而非显式的赋值
若同时有 final static,则初始化为指定的值
解释(optional)
符号引用转化为直接引用
初始化
执行/初始化
时机
new
访问某个类/接口的静态变量
调用类的静态方法
反射
初始化某个类的子类,其父类也会被初始化
JVM启动时被标明为启动类的类
执行引擎
字节码载入运行时数据区
解释器
JIT(即时编译器) 字节码转换为本地代码
使用
卸载
内存管理
内存分区
线程间共享
堆
新生代
Eden
Survivor_1
Survivor_2
老年代
方法区
Classloader引用
运行时常量池
字段数据
方法数据+代码
线程独享
栈(栈帧组成
类当前方法的运行时常量池引用
局部变量表
操作数栈
返回值
PC
本地方法栈
异常处理
OOM-OutOfMemoryError
内存泄漏
原因
全局集合
缓存(无限大)
ClassLoader
StackOverflowError
clone
浅复制
深复制
GC
具有平台依赖
对象判活
引用计数--注意循环引用
可达性分析(利用GCRoot
GC算法
标记清除
标记-整理
复制
分代收集
GC回收器
类型转换
长度
int:32bit
byte 8bit
char &short - 16bit
float - 32bit
long & double - 64bit
转换
自动提升
ps: 在运算时,长度小于int的会自动转换为 int, byte+byte->int
强制转换
异常
Throwable接口派生
Error,JVM生成
Exception,java程序生成
checked exception
IOException
ClassNotFoundException
CloneNotSupportedException
runtime exception
反射
IO流
字符流
Reader
BufferedReader
InputStreamReader
FileReader
StringReader
PipedReader
ByteArrayReader
FilterReader
PushbackReader
Writer
同上
字节流
InputStream
FileInputStream
FilterInputStream
BufferedInputStream
DataInputStream
PushbakInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
ByteArrayInputStream
OutputStream
File OutputStream
Filter OutputStream
buffered OutputStream
Data OutputStream
Print OutputStream
Object OutputStream
Piped OutputStream
ByteArray OutputStream
序列化
IO多路复用
select
每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
select支持的文件描述符数量太小了,默认是1024
poll
epoll
没有最大并发连接限制
只关心“活跃”的链接
使用共享内存,避开了内存拷贝
函数
epoll_create 创建专用的文件描述符,申请内和空间
epoll_ctl 控制某个文件描述符上的事件
epoll_wait 等待事件
工作模式
level trigger
edge trigger
NIO
Buffer
类型
普通变量类型
ByteBuffer
间接, HeapByteBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
MappedByteBuffer
文件关闭不确定,在full gc时关闭
使用步骤
分配空间
写入数据到Buffer
使用 filp()
从buffer读取数据
调用clear()/compact()
变量表示位置状态
Capacity 总长度
position 下一个操作的数据元素位置
limit 不可操作的元素位置
mark 记录当前position的前一个位置 或默认为0
Channel
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
Selector
使用
调用工厂方法 open()
将 ServerSocketChannel注册到 selector
interest集合
SelectionKey.OP_CONNECT
SelectionKey.OP_ACCEPT
SelectionKey.OP_READ
SelectionKey.OP_WRITE
调用select()方法
Iterator<SelectionKey> iter = selector.selectedKeys().iterator();
遍历Key 确定就绪状态
selectionKey.isAcceptable();
selectionKey.isConnectable();
selectionKey.isReadable();
selectionKey.isWritable();
遍历后,iter.remove()
注意每次迭代末尾的keyIterator.remove()调用。
Selector不会自己从已选择键集中移除SelectionKey实例。
必须在处理完通道时自己移除。
SelectionKey
interest集合
ready集合
channel
selector
面向对象
多态
继承、实现
不能继承的情况
抽象类
泛型
只在编译阶段有效
泛型类
通配符
?
? extends class
? super class
优点
类型安全,限制变量类型
消除强制类型转换
提高性能
注意事项
类型参数只能是类类型
不能对泛型类使用 instanceof
不能创建一个确切的泛型类型数组,使用通配符可以
数据结构
collection
Hashmap底层实现
排序
稳定排序
不稳定排序
String & StringBuffer
String s= new String("abc")
String s = "abc"
intern()方法
正则表达式
并发
锁
自旋锁
阻塞锁
可重入锁
读写锁
悲观/乐观锁
轻量级锁(CAS实现
X锁
对象锁、线程锁
公平/非公平锁
线程池
ThreadPoolExecutor
属性
corePoolSize
maximumPoolSize
keepAliveTime
volatile runState
Running
SHUTDOWN
STOP
TERMINATED
方法
execute
流程
submit()
shutdown()
shutdownNow()
初始化(提交任务才会创建线程)
prestartCoreThread() 启动一个
prestartAllCoreThreads()启动所有
任务缓存队列/排队策略
workQueue
ArrayBlockingQueue FIFO
LinkedBlockingQueue, FIFO
synchronousQueue,不保存任务,直接新建线程执行
任务拒绝策略
AbortPolicy 丢弃任务,抛出异常
DiscardPolicy 丢弃任务,不抛出异常
DiscardOldestPolicy 丢弃队列最前面的任务,重新执行
CallerRunsPolicy 由调用线程处理该任务
配置线程池大小
cpu密集型 -- Ncpu+1
IO密集型 --2*Ncpu
线程局部存储 TLS
concurrent库
队列
BlockingQueue 接口
ArrayBlockingQueue
DelayQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue-容纳单个元素
Map
ConcurrentMap接口
ConcurrentHashMap 只锁表项
闭锁 CountDownLatch
原子性数据类型
AbstractExecutorService
ExecutorService
submit
invokeAll
invokeAny
shutDown
Executor
execute
0 条评论
下一页