0%

JVM简介

JVM简介

java语言虽然不是最好的语言,但是JVM是最好的虚拟机,可以作为很多语言的平台,如java、scala、kotlin等,JVM是一个二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条java指令,JVM规范中都有详细定义,如何取操作数,如何处理操作数等

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

在最开始的JVM版本是使用纯解释器的方式来执行Java代码的

扩展

编译器和解释器有什么不同?

编译器是在运行前对所有源代码进行解释处理的,解释器是在运行时对源代码的内容一行一行地进行解释处理的

java代码的执行流程

java代码执行流程

  • 首先java源码(*.java)会先经过java编译器编译成字节码文件(*.class)

  • JVM使用类加载器装载字节码文件

  • 类加载完成之后,会进行字节码检验

  • 字节码检验通过后,JVM解释器会把字节码翻译成机器码交由操作系统执行,JVM同时还提供了JIT(Just In Time)即时编译器

javac

javac的任务就是将符合Java语言规范的源代码转化为符合Java虚拟机规范的Java字节码,从而使得JVM可以识别,这其中的操作就是编译原理中的操作,从词法分析到语法分析,然后进行语义分析,最后进行代码生成

javac组件

整体结构

JVM整体结构

其中方法区和堆是所有线程共享的数据区,而java栈、本地方法栈、程序计数器是线程私有的数据区

将每个模块细分的话就是

JVM整体详细结构

首先class字节码文件在类装载器子系统(Class Loader SubSystem)中有三个阶段

  • 1.加载 到内存中需要用到类加载器
  • 2.链接 链接中包含 验证、准备和解析
  • 3.初始化

加载完之后就进入内存,即运行时数据区,运行时数据区包含有

  • 方法区(所有线程共享)
  • 堆(所有线程共享)
  • 虚拟机栈
  • 程序计数器
  • 本地方法栈

执行引擎包含解释器、即时编译器(即时编译器中的步骤 中间代码生成器—> 代码优化器 —>目标代码生成器)、分析器、垃圾回收器

欢迎关注我的其它发布渠道