JVM虚拟机概述

JVM虚拟机是一个抽象机器,提供一个可以执行Java字节码的运行环境规范,JVM可以用于许多硬件和软件平台。

JVM

  • 一、JVM是什么?
  • 二、JVM虚拟机可以做什么?
  • JVM虚拟机内部体系结构
    • 类加载器
    • 类(方法)区域
    • 堆栈
    • 程序计数器寄存器
    • 本地方法堆栈
    • 执行引擎


一、JVM是什么?

  1. 指定Java虚拟机的工作规范,实现提供程序是独立的选择算法,由Sun公司等提供。
  2. 实现被称之为JRE,Java运行环境。
  3. 运行实只要在命令提示符上编写Java命令来运行Java类,就会创建一个JVM实例。

二、JVM虚拟机可以做什么?

JVM执行以下操作:

  • 加载代码
  • 验证代码
  • 执行代码
  • 提供运行时环境

JVM提供了以下定义:

  • 内存区
  • 类文件格式
  • 寄存器集合
  • 垃圾收集GC
  • 致命错误报告等等。

JVM虚拟机内部体系结构

Java虚拟机包含了类加载器、内存区域、执行引擎等等:
JVM虚拟机概述_第1张图片
运行JVM字节码的工作都是由解释器完成,解释执行分为三个过程:代码转入、代码校验、代码执行

  • 装入过程由类装载器Class Loader完成,类装载器负责装入运行一个程序需要的所有代码,包括程序代码的类的所有继承类和被调用类,当类装载器装入一个类时候,该类就存入自己的命名空间中。除了通过符号引用自己命名空间以外的类,类之间没有办法可以影响其他类。
  • 本台计算机的所有类都在同一个地址空间内,而所有从外部引进的类,都会有一个自己独立的名字空间,这会使得本地类通过共享相同类名字空间获得较高效率,同时保证外部引进类不会互相影响。
  • 全部装入所需类之后,解释器便可以确定整个可执行程序的内存布局,解释器为符号引用同特定的地址空间建立对应关系和查询表。通过这一阶段确定代码的内存布局,Java很好的解决了由超类改变而引起子类崩溃的问题,防止代码对地址的非法访问。
  • 最后,被装入的代码由字节码校验器验证,校验器可以发现操作数栈溢出,非法数据类型转换等等多种错误,通过校验之后,就可以开始执行。

类加载器

ClassLoader是JVM的一个子系统,用于加载类文件。

类(方法)区域

类方法区域存储每一个类结构,例如运行时的常量池,、字段和方法数据、方法代码等等。

这个是分配对象的运行时数据区。

堆栈

Java堆栈存储帧,它负责保存局部变量和部分结果,并且在方法调用和返回起作用。
每一个线程都有一个私有的JVM堆栈,同时创建线程,每次调用方法都会创建一个细腻的框架,框架只会在其方法调用完成时被销毁destroy。

程序计数器寄存器

PC-程序计数器寄存器,它包含当前正在执行Java虚拟机指令的地址。

本地方法堆栈

它包含应用程序所使用的所有本地方法。

执行引擎

执行引擎包含:

  1. 虚拟机处理器
  2. 解释器:读取字节码流,然后执行指令。
  3. 即时JIT编译器:用于提高性能,JIT编译同时类似字节码代码部分的功能,从而减少编译所需要的时间。编译器是指从Java虚拟机指令集到特定CPU指令集的转换器。

你可能感兴趣的:(jvm,java,开发语言)