原创

java-JVM


JVM

jvm 是java jre包中 可以解析字节码 转成机器码 使得跨平台

1

jvm内存布局

jvm 分成 栈,堆,方法区,程序计数器,本地方法栈,连接执行引擎,native方法接口,native方法
线程共享 
	堆:存放对象实例 分为 新生代 适合复制算法(1:1:8分配),老年代 gc回收
	方法区(元空间):存放类字节码 类结构信息
	程序计数器:记录 字节码指令地址
	栈:存放局部变量,过程方法
	本地方法栈:可以支持其他语言

1

引擎: 半解释(解释器) 半编译 JTC

1

类加载执行流程

类加载流程: 加载-连接(验证-准备-解析)-初始化-使用-卸载
	加载:通过class文件转成二进制字节流,将这个静态存储结构转化为方法区的运行时数据结构,在方法区生成 对象
	验证:文件格式验证 元数据验证 字节码验证 符号引用验证
	准备:堆类的变量分配内存 没有初始化
	初始化:执行类构造器 进行赋值
	使用:执行main方法
	结束:销毁class对象

1

双亲委派机制

三种加载器 从下往上 
app 应用程序加载 -> etc 拓展加载 -> boot Lib 加载
加载直接找父类,父类没有,依次往下找 解决类冲突

1

垃圾回收算法

垃圾:长时间没被使用
引用计数法:使用+1 不使用-1 无法解决 循环问题
gcRoot: 可触达 能够被摸到 就不是垃圾
垃圾算法:
		1 复制算法:内存分半,空间浪费,效率高
		2 标记清除法:通过gc标记 去除垃圾 无序 效率低
		3 标记整理法:通过gc标记 先整理 可用 再去除垃圾
		
	垃圾回收思想:分代 新生区(1:1:8)复制算法 老年区
	分区:可控制分区大小

1

垃圾回收器

串行 回收器:Serial(复制算法) , Serial old(标记清除算法) 单线程 最老的 
并行 回收器: ParNew(复制算法),Parallel Scavenge(复制算法 注重吞吐量),Parallel old(标记整理算法)  多线程
CMS 回收器: 标记清除算法 关注停顿时间 多线程
G1 回收器: jdk1.7之后 分代 分区算法 内存分割 

1

jvm调优

	防止 oom Full stw 
	步骤:性能监控(cpu过高)-性能分析-性能调优
使用jps,jstat指令 可以查看java里面运行的进程
	jps -v jvm参数
	jps -l 全类名
	jstat -class 进程id 查看类信息
	jstat -gc 进程id 查看gc详细信息 0区 1区 e区 堆内存
	jstack 进程名 查看死锁

1

总结
经验
  • 作者:阿杰(联系作者)
  • 发表时间:2023-06-15T21:48:13
  • 版权声明:杰出版
  • 公众号:--无
  • 评论