当前位置: 首页 > news >正文

JVM引入

虚拟机与 JVM

虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列的虚拟计算机指令。

虚拟机可以分为系统虚拟机程序虚拟机

  • Visual Box、VMware 就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可与逆行的完整操作系统的软件平台。
  • 程序虚拟机的经典代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令
  • 在虚拟机上运行的软件都被限制于虚拟机提供的资源中。

上面把JVM叫做Java虚拟机其实并不是特别合适,因为现如今不只有Java可以使用JVM,如Kotlin、Groovy这些,都可以编译为字节码文件(所有语言编译后的JVM字节码文件均遵循JVM规范),在JVM上运行。

这也是Java为什么是跨平台语言的原因,因为字节码是统一的

JVM

JVM 的作用

Java虚拟机就是二进制字节码的运行环境,负责装在字节码到其内部,解释/编译为对应平台的机器指令执行。每一条 Java 指令,Java 虚拟机规范中都有详细定义,如:怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点:

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

JVM 的位置

image-20251012235505871

1760284892260.png

JVM 的整体结构

  • HotSpot VM 是目前市面上的高性能虚拟机代表作之一,下图为 HotSpot VM 的内存结构
  • 它采用解释器与即时编译器并存的架构

1760285045116.png

Java 代码执行流程

执行流程就是我们上面简单提到过的

  1. Java 编译器编译 Java 源码,生成字节码文件
  2. 字节码文件载入 JVM
  3. JVM 将字节码编译为 机器码执行
    1760285721069.png

JVM 指令集架构

为满足跨平台性的设计,Java 的指令集都是根据栈来设计的。

不同平台的 CPU 架构不同,所以不能设计为基于寄存器的。这样做的优点是:跨平台,指令集小,编译器容易实现,也带来了缺点:性能下降,实现同样的功能需要更多的指令

JVM 生命周期

虚拟机的启动

Java 虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是有虚拟机的具体实现指定的。

虚拟机的执行

  • 一个与运行中的 Java 虚拟机有着一个清晰的任务:执行 Java 程序。

  • 程序开始执行时他才运行,程序结束时他就停止。

  • 执行一个所谓的 Java 程序的时候,真真正正在执行的是一个叫做 Java 虚拟机的进程。

虚拟机的退出

有如下几种情况:

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 操作系统出现错误导致 Java 虚拟机进程终止
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
  • 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API 来加载或卸载 Java 虚拟机时,Java 虚拟机的退出情况
http://www.hskmm.com/?act=detail&tid=30456

相关文章:

  • shiro 架构
  • test9 - post
  • 高级语言程序设计第一次作业
  • Python-weakref技术指南
  • 第二次
  • 从众多知识汲取一星半点也能受益匪浅【day11(2025.10.13)】
  • 王爽《汇编语言》第四章 笔记
  • 10.13总结
  • MySql安装中的问题
  • 题解:AT_agc050_b [AGC050B] Three Coins
  • go:generate 指令
  • 光栅化
  • 图形学中的变换
  • Unity URP 体积云
  • 使用DirectX绘制天空盒并实现破坏和放置方块
  • 编写DX12遇到的坑
  • 编写DX12时使用的辅助类
  • HLSL语法
  • DirectX12初始化
  • 实验2
  • CF2159B
  • 登录校验---Filter过滤器
  • 日志|Ajax
  • 环境变量 Path 配置实战指南:从“能用”到“专业”--两种配置环境变量的方法
  • 10月13日
  • Ubuntu22.04安装CH340/CH341驱动
  • 玄机蓝队靶场_应急响应_198:实战Live勒索病毒溯源排查
  • JetBrains Mono字体好看、及其它
  • STM32——UART
  • WebApi 交叉观察者- IntersectionObserver复盘