02-有哪些常见的JVM?请说下Java代码的运行机制

简介: 常见的JVM有Oracle JDK、OpenJDK、IBM JVM、Azul Zing JVM等。Java代码的运行机制如下:首先,Java源代码被编译成字节码文件(.class文件),其中包含了可执行指令。然后,JVM将字节码加载到内存中,进行校验、准备和解析等操作。接着,JVM将字节码转换为机器码,并交给处理器执行。执行过程中,JVM负责内存管理、垃圾回收和线程调度等任务。最后,程序执行完毕或遇到异常,JVM终止程序的运行。JVM的关键组件包括类加载器、即时编译器和垃圾回收器,它们确保了Java代码的可移植性、安全性和性能优化。这些信息有助于理解Java代码是如何在JVM上运行的。

1.JVM虚拟机介绍

  • 虚拟机概念:

    虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

  • 关键字理解:

    | 中文名 | 外文名 | 定义 |
    | ------ | --------------- | ------------------------------------ |
    | 虚拟机 | Virtual Machine | 具有完整硬件系统功能的完整计算机系统 |

    | 技术 | 与实体机区别 | 常见虚拟机 |
    | ---------------- | ------------------------ | -------------------------------------- |
    | 虚拟化技术的一种 | 可以像使用实体机一样使用 | Java虚拟机,Linux虚拟机,windows虚拟机 |

  • 虚拟机分类

    • Linux虚拟机

      一种安装在Windows上的虚拟linux操作环境,就被称为linux虚拟机。它实际上只是个文件而已,是虚拟的linux环境,而非真正意义上的操作系统。但是它们的实际效果是一样的。所以安装在虚拟机上使用好。常用安装虚拟机软件有:vmwareVirtualBox等。

    • Java虚拟机

      Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统

  • Java虚拟机的优点

    Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

    一句话就是:一次编译,到处运行,并且具备自动内存管理+自动垃圾回收功能

  • 总结

    Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果想扩展Java语言,或是把其它语言编译成Java语言的字节码,也需要深入地了解Java虚拟机。

2.常见的JVM

很多公司都有自己的JVM,比如Orcale的HotSpot,也是我们学习和使用的重点JVM虚拟机。

【其他两款特殊虚拟机介绍】

  1. Sun Classic VM介绍:

    早在1996年Java1.0版本的时候,SUN公司就发布了一款名为SUN Classic VM的Java 虚拟机,同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。这款虚拟机内部只提供解释器,如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统,解释器就不再工作。 解释器和编译器不能配合工作。

    现在hotspot已经内置了此虚拟机。

  2. Dalvik VM:

    谷歌开发的应用于Android系统的虚拟机,并在Android2.2中提供了JIT,发展迅猛。

    Dalvik VM 并不能直接执行Java的Class文件,因为其并没有遵循Java虚拟机的规范,它是基于寄存器结构而不是jvm的栈架构,因此其执行的是编译以后的dex(Dalvik Executable)文件【可以通过Class文件进行转化】,执行效率较高。

    Android5.0使用了支持提前编译(Ahead of Time Compilation,AOT)的ART VM替换Dalvik VM。

我们的学习路线图就通过从一个类的加载开始,来学习Java是如何将代码运行起来的,由点到面的方式,一步一步深入理解JVM的整体运行机制。

3.Java代码的运行机制

  • 我们平时写的Java代码,到底是如何运行起来的?

我们都知道,我们平时创建的一个一个类,在本地磁盘中的文件名后缀就是 .java,比如User.java 、Product.java ,这也叫做源代码文件。

这些源代码文件必须经历我们的javac工具进行编译后生成 .class 的字节码文件才能被运行。

那接着我们就要继续思考了:那这些 .class 字节码文件又是如何运行起来的?

(这里我们可以借助于DOS窗口执行 java 命令进行启动)

此时一旦采用 java 命令,实际上就是启动了一个JVM进程,由JVM来负责加载这些字节码文件到内存进行执行。

而将class字节码文件加载到虚拟机的内存,这个过程称为类加载,其中涉及到 【类加载机制】和【类加载器】的概念。

当字节码文件被类加载器加载进入到JVM内存中后,会通过JVM的执行引擎来执行我们内存中对应的类,比如类中的main方法,就会先被执行,而main方法中如果还涉及到其他的对象引用,类加载又会开始加载对应的字节码文件到内存,再由JVM进行调用执行。(如下图)

ok,通过以上的分析,我们可以先整体对java代码的运行流程做了一个全面的介绍,接下来再深入分析类加载器又是如何执行的,一步一步深入学习。

目录
相关文章
|
8天前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
|
2月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
226 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
1月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
171 29
JVM简介—1.Java内存区域
|
1月前
|
消息中间件 Java 应用服务中间件
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
|
1月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
85 5
|
3月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
846 11
|
3月前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
4月前
|
存储 Java 程序员
【JVM】——JVM运行机制、类加载机制、内存划分
JVM运行机制,堆栈,程序计数器,元数据区,JVM加载机制,双亲委派模型
101 10
|
4月前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
142 3
|
3月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
731 166

热门文章

最新文章