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