JVM
JVM内存模型
- 堆:对象。
- 栈:局部变量,操作数栈,动态连接,方法的返回地址。
- 方法区:常量,静态变量,类信息。
- 本地方法栈:Native方法。
- 程序计数器:字节码的访问地址。
类加载过程
- 过程:1、加载:生成class对象;2、验证;3、准备:static变量分配内存和初始值;4、解析:符号引用替换为直接引用;5、初始化:父类没初始化需先初始化。(
家宴准解出
)
双亲委派机制
- 父类加载,不重复加载。
- 自定义--应用程序--扩展--启动。
分代回收
- 新生代(Eden/s1/s2),老年代,永久代/元空间。
- 晋升机制根据对象存活时间。
垃圾回收器
CMS(标记清除):初始化标记,并发标记,重新标记,标记清除,标记重置。
G1(复制+标记清除):新生代和老年代不再隔离。
full gc的时机
- 老年代/永久代空间不足。
- System.gc()方法。
- 晋升老年代的大小大于老年代的剩余空间。
性能调优
- 目的:减少gc,stw。
- 方法:设置堆的最大最小值,调整新生代与老年代的比例,配置高可以设置并发收集算法。
oom种类
- 对象太多没有释放。
- 线程创建太多没有释放。
- fd太多,一个进程1024个fd。
逃逸分析
- 依据:对象被赋值给堆中对象的字段或类的静态变量(其他线程访问时编译器无法追踪);位于不确定的代码中(保守处理)。
JVM调优的情况
- 线程死锁
- 锁竞争
- CPU过高
- 内存泄露
JVM指令与工具
- jps:查看java进程概述
- jstat -gcutil [pid] [时间间隔]:根据进程id查看进程的详细情况
- jstack [pid]:查看进程中的线程运行状况
- jmap -dump:file=[文件名] pid:将进程运行的状况dump到文件中,文件通过fastThread线上工具分析。
- jmap -heap [pid]:打印进程的堆内存信息
- jconsole和visual VM工具
相关推荐
chensen 2020-11-14
lwnylslwnyls 2020-11-06
ATenhong 2020-10-15
yanzhelee 2020-10-13
佛系程序员J 2020-10-10
guojin0 2020-10-08
佛系程序员J 2020-10-08
bluewelkin 2020-09-16
wwzaqw 2020-09-04
zhongdaowendao 2020-09-02
favouriter 2020-08-18
奎因amp华洛 2020-08-15
一青年 2020-08-13
千锋 2020-08-10
dongxurr 2020-08-08
明天你好 2020-08-03
kyelu 2020-08-03
Ashes 2020-08-03
wndong 2020-08-01