Java
2019-09-04 09:55:18 0 举报
AI智能生成
登录查看完整内容
java精选
作者其他创作
大纲/内容
concurrent
并发锁
概念
synchroized
原理
使用
修饰普通方法
修饰静态方法
修饰代码块
monitorenter
monitorexit
ReetrantLock
分类
宏观分类
乐观锁
概念:读多写少,读操作不加锁,写操作枷锁
应用
悲观锁
概念:写多读少,读写操作都加锁
微观实现分类
偏向锁:单线程使用偏向锁
轻量级锁
多线程竞争资源时,偏向锁升级为轻量锁
自旋锁
轻量锁进行自旋尝试
重量级锁
自旋锁达到阈值,升级为重量级锁,并进行阻塞
线程池
FixThreadPool
SingleThreadPool
CacheThreadPool
参数
excute()步骤
拒绝策略
SchedulThreadPool
ForkJoinPool
CopyOnWrite
1.读写分离,读不加锁,写加锁
实现
CopyOnWriteList
CopyOnWriteSet
CompareAndSwap
volatile
内存屏障锁导致工作内存中标记变量失效
Runnable和Callnable区别
AQS实现原理
竞态
多线程访问同一资源时顺序敏感时存在竞态条件
临界区
导致竞态条件的代码块称之为临界区
JVM
基本概念
定义
组成
版本
JVM1.5
JVM1.6
偏向锁
JVM1.7\t
独占缓存行需要用long型变量补充为64位或32位
JVM1.8
Runtime Data Area(运行时数据区域)
线程共享内存
Heap堆
MethodArea方法区
RunTime ConstantPool
线程私有内存
PC Register程序计数器
功能:a.记录每个线程当前的字节码指令,以便线程切换
特点:JVM虚拟机规范中唯一一个没有OutOfMemoryError的区域
JVMStack虚拟机栈
功能:
1.描述Java方法执行的内存模型(即方法执行时创建栈帧来存储局部a.变量表、b.操作数栈、c.动态链接、d.方法出口)
异常:
StackOverflowError(线程请求栈深度大于虚拟机允许栈深度)
OutOfMemoryError(虚拟机栈动态拓展无法申请到内存)
Native Method Stack本地方法栈
功能:与虚拟机站类似
区别:
1.本地方法栈为虚拟机栈服务
2.虚拟机栈为Java方法服务
异常:同上
DirectMemory(直接内存)
JVM内存模型
目的:
1.屏蔽各种硬件和操作系统的内存访问差异
2.避免同一套程序在不同硬件环境或不同操作系统环境中的错误
主内存与线程工作内存
内存间的交互操作
操作
lock(锁定)
unlock(解锁)
read(读取)
load(载入)
use(使用)
assign(使用)
store(存储)
write(写入)
操作规则
1.不允许read和load、store和write操作之一单独出现
2.不允许一个线程丢弃它的最近的assign操作,即工作内存改变时必须同步改变主内存
3.不允许一个线程无原因的把数据从工作内存同步回主内存
4.新变量只能在主内存”诞生“赋值,并加载到工作内存
5.一个变量同一时刻只允许被一条线程进行lock和unlock操作
6.如果一个变量执行lock操作,将会清空工作内存中此变量的值
7.如果一个变量没有被lock,就允许被unlock,且不允许unlock其他变量的锁
8.一个变量unlock前,必须先把此变量同步回主内存中
volatile型变量的特殊规则
禁止指令重排序
修饰的变量具有可见性(即写操作会使工作内存变量失效)
long型和double型变量的特殊规则
内存模型特性
Atomicity原子性
Visibility可见性
概念:即保证新值能立即同步回主内存
volatile、synchronized和final
Ordering有序性
概念:即线程间的执行顺序有序
实现:volatile和synchronized
happens-before先行发生原则
程序次序规则(Program Order Rule)
管程锁定规则(Monitor Lock Rule)
volatile变量规则(Volatile Vsriable Rule)
线程启动规则(Thread Start Rule)
线程终止规则(Thread Termination Rule)
线程中断规则(Thread Interruption Rule)
对象终结规则(Finalizer Rule)
传递性(Transitivity)
JVM类加载机制
加载步骤
加载Loading
通过类全限定名获取字节流
静态存储结构转化为方法区的运行时数据结构
内存中生成类对象
验证(Verification)
文件格式验证
元数据验证
字节码验证
符号引用验证
准备(Preparation)
解析(Resolution)
初始化(Initialization)
使用(Using)
卸载(Unloading)
双亲委派机制
JVM参数
参数分类
标准参数
非标准参数
-X开头的标准选项
-XX开头非稳定参数
-D系统属性参数
可从system.properties参数中取出
常用参数
调优参数
JVM调优工具
JDK自带命令行工具
jps虚拟机进程
-v进程显试参数列表
-m主类传递参数
-l主类全名
jinfo配置信息
-flag隐式默认参数
-sysprops进程properties
-flag [+/-] name修改部分参数
jstat虚拟机统计信息监控
jstack堆栈跟踪工具
线程堆栈打印
线程停顿、死锁、死循环、外部请求等待等
jmap内存映射工具
-dump堆存储快照
-histo对象统计信息包括类、实例数、合计容量
jhat虚拟机堆转存储快照分析工具
JConsole/VisualVM
JheapAnalyzer/JstackAnalyzer
GC
垃圾收集算法
Reference Counting(引用计数)
优点:实现简单,判定效率高
缺点:无法解决对象间的循环引用
GC Roots Tracing(根搜索/可达性分析算法)
java中GC Roots的对象
虚拟机栈中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中引用的对象
对象引用类型
强引用(Strong Reference)
软引用(Soft Referrence)
弱引用(Weak Referrence)
虚引用(Phantom Reference)
Mark Sweep(标记清除)
思想:分”标记“和清除两个阶段处理
缺点:1.效率低 2.非连续内存碎片
Copying(复制)
思想:将可用内存划分为大小相等的两块,每次只使用其中一块,将存活对象复制到另一块,清理整块内存
优点:实现简单、运行高效
缺点:内存可用率为50%
Mark-Compact(标记整理)
思想:标记可清除对象,移动存活对象至另一端、然后清楚端边界外的内存
优点:内存可用率高,实现简单
Generation Collection(分代收集算法)
垃圾收集器
Serial收集器
新生代:复制算法
老年代:标记整理算法
ParNew收集器
与CMS配合工作
Parallel Scavenge收集器
与其它新生代收集器相比更注重吞吐量
Parallel Old 收集器
CMS收集器
老年代:标记清除算法
运行步骤
初始标记
并发标记
重新标记
并发清除
特点
1.并发收集,低停顿
2.占用CPU资源
3.无法处理浮动垃圾
4.会产生碎片空间,需要fullGC去整理
G1收集器
最终标记
筛选回收
JVM OOM原因
heap space
可能原因
内存泄漏
大对象分配
数组
Finalizable
解决方案
dump堆分析
加大-Xmx堆内存
GC overhead limit exceede
堆过小
超过98%的时间做GC并且回收了不到2%的内存
存在无法回收的对象
检查优化深度递归、大量死循环、大内存使用代码
添加-XX:-UseGCOverheadLimit延后堆溢出错误
PermGen/Metaspace
Java7之前频繁错误使用String.intern()方法
运行期间生成了大量的代理类
应用长时间运行没有重启
检查反射和intern的应用
dump检查反射对象数量
重启JVM进程
Method stack
创建线程量过大
unable to create new native thread
添加-Xss控制单个线程栈的大小
控制线程在合理范围内
非常规溢出
Requested array size execeeds VM limit
Swap space
swap分区分配大小不足
其他进程消耗了所有内存
Native Method stack
Java
collections
Collection
List
Set
Map
Vector
Stack
I/0
BIO
概念:
特征:
面向流
阻塞
NIO
通道
即可以从通道读取数据到buffer,又可以从buffer写数据到通道
通道可以异步的读写
缓冲区
实现原理
参数及方法
capacity
position
写模式时,position表示当前可写的位置下标
读模式时,position表示当前可读位置下标(注:写切换读时position置0)
limit
写模式写limit等于capacity
读模式下limit等于写模式下的position(即当前写入的数据上线)
flip()写模式切换到读模式
clear()全部清空
compact清空已读部分
选择器
即将通道注册进selector,进行事件监听
事件类型
SelectionKey.OP_CONNECT
SelectionKey.OP_ACCEPT
SelectionKey.OP_READ
SelectionKey.OP_WRITE
API组成
Channels
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
Buffers
MappedByteBuffer
内存隐射文件
ByteBuffer
CharBuffer
IntBuffer
ShortBuffer
FloatBuffer
DoubleBuffer
LongBuffer
Selectors
Framwork
netty
mina
AIO
0 条评论
回复 删除
下一页