JVM虚拟机原理及JVM调优

JVM虚拟机

JVM运行流程

生成.class可执行 >>> 类装载子系统 >>> 运行时数据区(内存模型) >>> 字节码执行引擎

JVM虚拟机原理及JVM调优_第1张图片

内存模型

局部变量表

​ 存放局部变量

操作数栈

​ 存放临时的操作数区域

动态链接

方法出口

​ 开辟内存空间,创建对象

方法区

​ 常量 + 静态变量 + 类信息

本地方法栈

​ native修饰,底层C语言实现的

​ 本地方法栈运行的区域**(例如:加减操作)**

程序计数器

​ 最经典的示例:多线程挂起,从一个线程转化为另外一个线程的时候,如何判断从何处开始,这时候需要用到程序计数法

垃圾回收机制

可达性分析算法

​ 将"gc root"作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的对象都是垃圾对象 gc roots 根节点: 线程栈的本地变量,静态变量,本地方法栈等

引用计数器

​ 为每个对象创建一个引用计数,有对象引用时计数器+1,引用被释放时计数-1,当计数器为0时就可以被回收,它有一个缺点不能解决循环引用的问题

动态对象判断机制

​ 当回收的垃圾到达from survivor并且大于 from survivor(s0)内存的一半,自动放入老年代

垃圾回收算法

标记-清除算法

缺点:标记清除后会产生大量不连续的内存碎片
JVM虚拟机原理及JVM调优_第2张图片

复制算法

缺点:效率高但是极其浪费内存空间
JVM虚拟机原理及JVM调优_第3张图片

标记整理算法

缺点:效率低,存活对象会经常性的移动位置

JVM虚拟机原理及JVM调优_第4张图片

分代回收算法

新生代垃圾回收一般采用的是复制算法,复制算法的优点是效率高,缺点是内存利用率低;老年代回收器一般采用的是标记-整理的算法进行垃圾回收
JVM虚拟机原理及JVM调优_第5张图片

java虚拟机调优的目的

STW

​ 停止服务器清理垃圾,一般适用于 老年代

java虚拟机调优的目的

​ 减少STW(减少老年代垃圾回收的处理时间,或者排出javaBean以外的资源进入老年代)

JVM虚拟机原理及JVM调优_第6张图片

1、把Eden+From Survivor存活对象放入To Survivor区

2、清空Eden+ From Survivor 分区;

3、From Survivor和To Survivor分区交换,From Survivor变To Survivor,To Survivor 变 From Survivor

4、每次From Survivor 到To Survivor移动时都存活的对象,年龄就+1,当年了到达15(默认)时,升级为老年代,大对象也会直接进入老年代

5、老年代当空间占用到达某个值之后就会触发全局垃圾回收,一般使用标记整理的执行算法

你可能感兴趣的:(jvm虚拟机,jvm内存优化,JVM调优)