JVM原理

一、概念

JVM是Java-Virtual-Machine的缩写,即Java虚拟机。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

首先一次编译处处运行是学习Java语言都知道的事情,其实并不是Java语言跨平台,是JVM跨平台,Jvm运行时并不是执行Java文件,而是执行编译后的.class文件。

字节码文件即JVM可以识别并执行的二进制文件,不同的编程语言经过编译器编译处理之后,转换成统一的字节码规范文件,这样JVM就可以执行。

跨平台的特性即JVM虚拟机可以运行在不同的计算机系统上,例如经常使用的Linux系统,MacOS系统,Win系统,一次编译,处处运行就是这样理解的。

二、结构

1、类加载器:类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件,类加载器负责读取字节代码,并转换成java.lang.Class类的一个实例。

2、运行时数据区(内存模型)

    2.1、堆:存储对象。垃圾回收机制(GC)。

    2.2、栈:

        2.2.1、局部变量表

        2.2.2、操作数栈

        2.2.3、动态链接:将符号引用转换为直接引用

        2.2.4、方法出口

    2.3、本地方法栈:为 JVM 运行 Native 方法准备的空间,由于很多 Native 方法都是用 C 语言实现的,所以它通常又叫 C 栈。

    2.4、方法区(元空间):存储类信息、常量、静态变量。

    2.5、程序计数器:相对较小的一块内存空间,作用可以理解是当前线程所执行的字节码的行号+1的指示器,记录当前线程执行到哪一行代码。(随着程序的运行,由字节码执行引擎动态修改)

3、字节码执行引擎:Java虚拟机最核心的组成部分,输入的是字节码,处理过程是字节码解析,输出执行结果。

三、垃圾回收(GC)

1、结构:

堆内部由年轻代(1/3)和老年代(2/3)组成。

年轻代由eden区和survivor(s0/s1)区组成。

minor GC对年轻代进行垃圾收集,full GC对整个堆进行垃圾收集。

 

2、垃圾收集底层如何实现的?

由字节码执行引擎开启垃圾收集线程。

可达性分析算法:将GC Roots对象作为起点,从这些节点乡下搜索引用的对象,找到的对象都标记为非垃圾对象,其余为垃圾对象。

GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等。

3、JVM调优工具(阿里巴巴Arthas)

Arthas是阿里巴巴在2018年9月开源的Java诊断工具。

3.1、下载好jar包后,使用“java -jar arthas-boot.jar”命令启动

3.2、选择想要监控的程序,输入其序号

3.3、使用“dashboard”命令查看

3.4、使用“thread id”查看异常(如cpu站比高,状态一直为blocked)的线程

 

posted on 2024-03-06 15:02  Neonuu  阅读(16)  评论(0编辑  收藏  举报