JVM 虚拟机 ---> JVM 基础概念

文章目录

    • [JVM 虚拟机 ---> JVM 基础概念](#JVM 虚拟机 ---> JVM 基础概念)
      • [一、Java 跨平台](#一、Java 跨平台)
      • [二、JVM 的组成结构](#二、JVM 的组成结构)
      • [三、Java 代码执行流程](#三、Java 代码执行流程)
      • [四、JVM 的生命周期](#四、JVM 的生命周期)

JVM 虚拟机 ---> JVM 基础概念

一、Java 跨平台

  • Java是一种可跨平台的编程语言,我们通常把CPU处理器与操作系统构成的计算机系统整体成为叫平台
  • 不同的CPU,差异主要在底层指令集不同,指令集分为精简指令集(RISC)和复杂指令集(CISC)。每个CPU都有自己的特定指令集

**指令集:**是CPU中用来计算和控制计算机系统的一套指令集合

  • 不同的操作系统,支持不同的CPU,严格来说,不同的操作系统支持不同的CPU指令集。例如:早期的Mac操作系统只支持PowerPC,不能安装在IntelCPU上。
  • 现在WindowsLinuxMACSolaris都支持IntelAMD CPU指令集

主要原因

  • Java 可以跨平台的主要原因是有 JVM
  • 不同的平台,使用不同的 JVM

Java 源代码在编译后会生成一个 Class 文件,称为字节码文件,JVM负责将字节码文件翻译成特定平台下的机器码,然后运行

简单来讲,Java的跨平台就是因为不同版本的 JVM。只要在不同的平台上安装相应的JVM,就可以运行字节码文件.class)并运行我们编写的Java程序。

在这个过程中,我们编写的Java程序没有做任何改动,只是通过JVM的"中间层",就可以在不同的平台上运行,真正实现了"一次编译,到处运行(write once,run anywhere)"的目的。

综上所述,JVM是跨平台的桥梁和中间件,是实现跨平台的关键。首先将Java代码编译成字节码文件,然后通过JVM将其翻译成机器语言,从而达到运行Java程序的目的。因此,运行Java程序必须有JVM的支持,因为编译的结果不是机器代码,必须在执行前由JVM再次翻译

注意:编译的结果不是生成机器代码,而是生成字节码。字节码不能直接运行,必须由JVM转换成机器码。编译生成的字节码在不同的平台上是相同的,但是JVM翻译的机器码是不同的。

二、JVM 的组成结构

JVM 由 类加载器、运行时数据区、执行引擎组成

三、Java 代码执行流程

四、JVM 的生命周期

JAVA程序的执行过程简单来说包括:

  1. JAVA源代码编译成字节码;
  2. 字节码校验并把JAVA程序通过类加载器加载到JVM内存中;
  3. 在加载到内存后针对每个类创建Class对象;
  4. 字节码指令和数据初始化到内存中;
  5. 找到main方法,并创建栈帧;
  6. 初始化程序计数器内部的值为main方法的内存地址;
  7. 程序计数器不断递增,逐条执行JAVA字节码指令,把指令执行过程的数据存放到操作数栈中(入栈),执行完成后从操作数栈取出后放到局部变量表中,遇到创建对象,则在堆内存中分配一段连续的空间存储对象,栈内存中的局部变量表存放指向堆内存的引用;遇到方法调用则再创建一个栈帧,压到当前栈帧的上面。
相关推荐
符哥20084 小时前
C++ 进阶知识点整理
java·开发语言·jvm
夕除4 小时前
js--15
java·jvm·spring
4311媒体网7 小时前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
猫头虎16 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
wgslucky17 小时前
jdk17 配置jvm参数中gc的日志及控制日志数量和大小
jvm·gc·-xlog
痴儿哈哈1 天前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
野犬寒鸦1 天前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
闻哥1 天前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
星辰_mya1 天前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
蓝帆傲亦1 天前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle