【JVM系列】- 启航·JVM概论学习

news2025/9/21 12:38:59

启航·JVM概论

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 博客首页   @怒放吧德德  To记录领地
🌝分享学习心得,欢迎指正,大家一起学习成长!

在这里插入图片描述

文章目录

  • 启航·JVM概论
    • 前言
    • 虚拟机和Java虚拟机
      • 1 虚拟机
      • 2 Java虚拟机
      • 3 JVM的位置
      • 4 *JVM的整体结构
        • 1) 简单介绍HotSpot VM
        • 2) 整体结构介绍
      • 5 Java代码执行流程
      • 6 JVM的生命周期
        • 虚拟机启动
        • 虚拟机执行
        • 虚拟机退出
      • 7 常见虚拟机
    • 总结

前言

为什么要学习JVM?相信好多开发者开头也处于迷惑之中,对于Java虚拟机也是很头疼,大多开发者都会认为,学习JVM无非就是面试。然而,学习JVM并不是为了面试,更是为了深入去理解Java这门语言,笔者大学毕业入坑Java以来也有一年多了,说长也不长,但是在开发的过程中却也是遇到一些性能问题,最后也是由领导解决。个人认为,学习Java虚拟机更是一种基础知识,在开发中才能够深入理解一些细节。

虚拟机和Java虚拟机

1 虚拟机

虚拟机(Virtual Machine)是一种软件或硬件实体,它模拟了物理计算机的功能,允许在其上运行操作系统和应用程序。虚拟机通常用于隔离不同的计算环境,提供了一种独立于物理硬件的计算平台。

2 Java虚拟机

Java虚拟机(Java Virtual Machine,JVM)是一种软件虚拟机,特别为执行Java程序而设计。JVM是Java平台的核心组件之一,它负责将Java字节码翻译成可以在特定计算机上运行的本地机器代码。Java程序员编写的Java代码首先被编译成字节码,然后由JVM执行。这种方式使Java程序具有跨平台的特性,因为只需要在不同平台上实现JVM,就可以在各种操作系统上运行相同的Java程序。

JVM的主要任务包括字节码加载、解释执行或即时编译、垃圾回收、内存管理等。它还提供了各种标准库和API,用于支持Java程序的运行和互动。不同的Java虚拟机实现可以适应不同的硬件和操作系统,但它们都遵循Java虚拟机规范(Java Virtual Machine Specification),以确保Java程序的跨平台性。

3 JVM的位置

Java虚拟机试运行在操作系统之上的,和硬件是没有直接交互的。
在Java 生态系统中的三个关键组件:JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)
① JDK(Java Development Kit)

JDK是用于Java应用程序的开发工具包。它包括Java编译器(javac)、Java虚拟机(JVM),以及各种开发工具和库,如调试器、性能分析工具、API文档生成工具等。JDK是开发人员用于创建、编译和调试Java应用程序的关键工具,它使开发者能够编写Java源代码并将其编译成Java字节码。JDK的结构包括bin目录,其中包含编译器和其他命令行工具,以及lib目录,其中包含Java类库和运行时支持。

② JRE(Java Runtime Environment)

JRE是用于运行Java应用程序的运行时环境。它包括Java虚拟机(JVM)和Java类库(Java API),允许用户执行已编译的Java应用程序,而不需要进行开发。JRE没有开发工具,因此不包含编译器或其他开发相关的工具。JRE的结构包括bin目录,其中包含用于运行Java应用程序的JVM可执行文件,以及lib目录,其中包含Java类库

三者中,JDK 包含 JRE,而 JRE 包含 JVM。JDK 提供了完整的 Java 开发和运行时环境,适用于开发人员,而 JRE 提供了用于运行 Java 应用程序的环境,适用于普通用户或生产环境。 JVM 是在 JDK 和 JRE 中共享的核心组件,负责执行 Java 应用程序。

4 *JVM的整体结构

1) 简单介绍HotSpot VM

HotSpot VM(HotSpot Virtual Machine)是Oracle(以前是Sun Microsystems)开发的 Java 虚拟机的一种实现,它是Java平台上最广泛使用的虚拟机之一。HotSpot VM在性能和可移植性方面表现出色,它是Java应用程序的运行时引擎,负责将Java字节码翻译成本地机器代码并执行程序。

HotSpot VM是Oracle JDK(Java Development Kit)的一部分,也是许多其他Java发行版的基础,包括OpenJDK。由于其卓越的性能和稳定性,HotSpot VM一直是广泛使用的Java虚拟机之一,特别适用于生产环境和要求高性能的Java应用程序。

2) 整体结构介绍

在这里插入图片描述

对于上图,这里简单介绍一下
首先是Java类通过编译成class文件,在用过类加载器加载到内存中。

类加载是Java虚拟机(JVM)的一个关键组件,负责将Java字节码文件加载到内存中并转换为可执行的类。类加载器的主要任务是查找和加载类文件,确保在程序运行时可以访问所需的类。类加载器的工作使Java的动态性成为可能,允许在运行时加载和卸载类。

接着看这个第二层,运行时的数据区,这里包含了方法区、Java栈、本地方法栈、堆、程序计数器

方法区是存储类信息、常量、静态变量以及编译后的字节码的地方,包括类的结构信息、方法和字段描述,以及运行时常量池。
是Java程序中用于存储对象实例的区域。
是每个线程独有的,用于存储方法调用、局部变量以及方法返回值。
本地方法栈与栈类似,但它存储的是Java程序调用本地方法(使用JNI,Java Native Interface)时的信息。
程序计数器是当前线程执行的字节码指令的位置计数器。

总结

方法区和堆:这两个是多线程共享的
Java栈、本地方法栈和程序计数器:这是每个线程都独有一份

最后看第三层,这一层是和操作系统和硬件交互的重要组件。执行引擎,这是Java虚拟机核心组件之一,他是负责执行Java字节码,将Java字节码解释成底层平台的机器码,或者通过即时编译器(Just-In-Time Compiler,JIT)将字节码编译成本地机器代码以提高性能。本地方法接口是Java虚拟机提供的机制,允许Java代码与本地代码(通常是用C或C++编写的)进行交互,在Java中就是呗native修饰的接口方法。本地方法库是包含本地方法的动态链接库(通常是.so文件或.dll文件),用C或C++编写。

5 Java代码执行流程

Java代码的执行流程可以分为一下几个步骤:

  • 编写Java代码:编写一个xxx.java的文件。
  • 编译源代码:使用Java编译器,将Java源文件编译成xx.class的字节码文件(通常是使用javac)。
  • Java虚拟机:在Java虚拟机(JVM)中,其负责加载字节码文件并将其转换为可执行代码。在类加载过程中还有一些操作,类加载、链接、初始化等等。
  • 执行程序:一旦类加载完成并且程序初始化完成,JVM开始执行程序。
  • 运行时垃圾收集:JVM会定期检查不再被引用的对象,并进行垃圾回收以释放内存资源
  • 程序结束:程序执行完main方法或遇到异常时,程序将结束执行。

在这里插入图片描述

6 JVM的生命周期

Java虚拟机的生命周期简单来说就是三个阶段:启动、执行、退出。JVM的生命周期确保了Java程序的安全加载、初始化和执行,以及资源管理和垃圾回收。这一过程是Java跨平台性的关键,因为它将Java程序从特定硬件平台解耦,使其能够在不同操作系统上运行。

虚拟机启动

Java虚拟机在启动的时候是通过类加载器创建一个初始类来完成。在这一阶段,类加载器加载Java字节码文件,并对其进行验证、准备、解析和初始化等操作,接着链接,包括验证类的正确性、为静态变量分配内存和解析符号引用。然后初始化,在这个阶段,JVM执行类的静态初始化代码,初始化静态变量。

虚拟机执行

JVM进入运行阶段,开始执行程序,通常从main方法开始。程序在运行过程中可以加载、链接、初始化其他类,并执行程序逻辑。同时,JVM的垃圾回收器定期检查不再被引用的对象,进行垃圾回收。这个Java程序在Java虚拟机中就是一个进程。

虚拟机退出

在程序执行完成或出现严重错误时,JVM会进入终止阶段,可以执行清理操作。最后,如果某个类不再被引用,并且没有实例存在,JVM可能会进行卸载,释放内存。

7 常见虚拟机

常见的虚拟机,每种的实现通常都是针对不同的需求,比如sun classic vm、exact vm、jrockit、j9等等。以下笔者通过网络查阅到一些的简单介绍。

在Java生态系统中,有几个常见的Java虚拟机(JVM)实现,每个实现通常针对不同的用例和需求。以下是一些常见的JVM实现:

  • Oracle HotSpot JVM:这是Oracle公司的官方JVM实现,广泛用于生产环境。它以高性能和优化而闻名,是许多企业应用程序的首选JVM。
  • OpenJDK:OpenJDK是Oracle的开放源JVM实现,也是许多其他JVM的基础。它提供了Java开发工具和库,并被许多Linux发行版采用作为默认JVM。
  • IBM J9 JVM:IBM的J9虚拟机是WebSphere应用服务器和其他IBM产品的一部分。它专注于嵌入式和企业级应用。
  • Apache Harmony:虽然已经终止,但Apache Harmony曾是一个Apache项目,旨在创建一个免费的、开放源的JVM实现。虽然它不再维护,但它仍然被某些项目和研究用途使用。
  • GraalVM:GraalVM是Oracle开发的一款全栈虚拟机,支持多种语言,包括Java、JavaScript、Python等。它具有高性能和多语言互操作性,适用于各种应用场景。
  • Azul Zing:Azul Zing是专门针对大规模、高性能Java应用程序而设计的JVM。它包括C4垃圾收集器,可显著降低垃圾回收停顿时间。
  • SAP JVM:SAP JVM是针对SAP应用的JVM实现,优化了SAP系统的性能和稳定性。

这些JVM实现在性能、垃圾回收策略、支持的平台和工具等方面存在差异,开发人员可以根据其应用程序的需求选择最适合的JVM。总的来说,Java虚拟机的多样性为Java生态系统的健康发展提供了重要的选择。

总结

本章就是学习一下Java虚拟机的概念,为了对Java虚拟机有个简单的认识。总之我们知道的JVM有许多,但是我们经常遇到的就是 Oracle HotSpot JVM ,Java虚拟机的主要任务包括字节码加载、解释执行或即时编译、垃圾回收、内存管理等。它还提供了各种标准库和API,用于支持Java程序的运行和互动。不同的Java虚拟机实现可以适应不同的硬件和操作系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 + Nodejs 实战 ,文件上传项目--实现图片上传

目录 技术栈 1. 项目搭建前期工作(不算太详细) 前端 后端 2.配置基本的路由和静态页面 3.完成图片上传的页面(imageUp) 静态页面搭建 上传图片的接口 js逻辑 4.编写上传图片的接口 5.测试效果 结语 博客主页:専心_前端,javascript,mys…

记一次惊险的CDH6.3.2集群断电后重启的过程

重启服务 systemctl restart cloudera-scm-server.service systemctl restart cloudera-scm-agent.service查看服务是否启动,显然结果是failed systemctl status cloudera-scm-server.service查看异常 journalctl -xe去看服务日志 发现是这个位置错误 SqlExcep…

018-第三代软件开发-整体介绍

第三代软件开发-整体介绍 文章目录 第三代软件开发-整体介绍项目介绍整体介绍Qt 属性系统QML 最新软件技术框架 关键字: Qt、 Qml、 属性、 Qml 软件架构 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object …

Java Day1

day01 一、Markdown 基础语法1.标题2. 字体3. 引用 >4. 分隔线 --- ***5. 图片 ![]()6.超链接7.列表8.表格9.代码 代码名称 二、计算机三、常用快捷键1. Win 系列2. Ctrl 系列3. ALt 系列 四、 基本的DOS命令1. 打开方式:2. 常用DOS命令 五、计算机语言发展史第一…

黑马JVM总结(三十二)

(1)类加载器-线程上下文1 使用的应用程序类加载器来完成类的加载,不是用的启动类加载器,jdk在某些情况下要打破,双亲委派的模式,有时候需要调用应用程序类加载器来完成类的加载,否则有些类它是找…

Linux C select 的学习

一. select 系统调用 1. 函数说明 #include <sys/select.h> #include <sys/time.h>int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);nfds: 是一个整数值&#xff0c;是指集合中所有文件描述符的范围&#…

JavaScript使用类-模态窗口

**上节课我们为这个项目获取了一些DOM元素&#xff0c;现在我们可以继续&#xff1b;**这个模态窗口有一个hidden类&#xff0c;这个类上文我们讲了&#xff0c;他的display为none&#xff1b;如果我们去除这个hidden的话&#xff0c;就可以让这个模态窗口展现出来。如下 cons…

【机器学习】sklearn对数据预处理

文章目录 数据处理步骤观察数据数据无量纲化缺失值处理处理分类型特征处理连续型特征 数据处理步骤 数据无量纲化缺失值处理处理分类型特征&#xff1a;编码与哑变量处理连续型特征&#xff1a;二值化与分段 观察数据 通过pandas读取数据&#xff0c;通过head和info方法大致查…

TCP/IP(十五)拥塞控制

一 拥塞控制 ① 拥塞控制必要性 思考&#xff1a; 为什么要有拥塞控制呀,不是有流量控制了吗&#xff1f; ② 拥赛窗口 cwnd 什么是拥塞窗口? 和发送窗口有什么关系呢?明白&#xff1a; cwnd、swnd、rwnd 缩写 含义 ③ 如何知道当前网络是否出现了拥塞呢&#xff1f;…

抖音小程序没人做了吗?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 咱说的严谨点&#xff0c;不是没人做了&#xff0c;而是做的人少了。利益驱使&#xff0c;越来越多的人开始思考新方向了&#xff0c;开发小程序的人少了&#xff0c;排名也没多少人做了&#xff…

RustDay03——记录刷完Rust100题

刷了两三天Rust&#xff0c;终于把Rust100题刷完了&#xff0c;小小记录一下 明天白天的时候重开账户开题写答案

不定积分(原函数)存在性定理、定积分存在性定理、变限积分存在性定理

1.不定积分(原函数)存在性定理、定积分存在性定理、变限积分存在性定理 笔记来源&#xff1a; 1.10个命题搞懂可积和原函数存在 2.考研变限积分概念超详细&#xff0c;超通俗讲解&#xff08;变限积分和原函数关系&#xff09; 声明&#xff1a;本文截图主要来自bili心一学长、…

大数据Doris(九):配置BE步骤

文章目录 配置BE步骤 一、配置be节点

自建数据集,基于YOLOv7开发构建农田场景下杂草检测识别系统

在我们前面的一些文章中也做过不少跟农业相关的检测项目&#xff0c;感兴趣的话可以自行移步阅读即可&#xff0c;这里仅给出来最近的两个&#xff1a; 《激光除草距离我们实际的农业生活还有多远&#xff0c;结合近期所见所感基于yolov8开发构建田间作物杂草检测识别系统》 …

github Release 下载加速,绿色合法,遥遥领先

你有没有这样一个困惑&#xff0c;当你寻找了很久终于找到一个解决问题的方案&#xff0c;发现这个工具在 GitHub 上&#xff0c;接下来等待我们的就是遥遥无期的龟速下载。 文章目录 前言下载测试加速下载操作 视频讲解 遥遥领先 前言 GitHub 作为程序员的知识宝库&#xff…

stm32学习笔记:中断的应用:对射式红外传感器计次旋转编码器计次

相关API介绍 EXT配置API(stm32f10x exti.h&#xff09; NVIC 配置API (misc.h) 初始化的中断的步骤 第一步&#xff1a;配置RCC时钟&#xff0c;把涉及外设的时钟都打开 第二步&#xff1a;配置GPIO&#xff0c;设置为输入模式 第三步&#xff1a;配置AFIO&#xff0…

JFLASH基本使用总结

注意&#xff0c;不同版本的操作略有不同&#xff0c;本教程以J-Flash V5.12f为例。 烧录文件 如果是刚打开J-Flash&#xff0c;会弹出这样的一个工程选择界面&#xff0c;可以选择已有工程&#xff0c;或者创建新的工程&#xff0c;我们这里选择创建新工程。 注意&#xff0…

软件设计师学习笔记12-数据库的基本概念+数据库的设计过程+概念设计+逻辑设计

1.数据库的基本概念 1.1数据库的体系结构 1.1.1常见数据库 ①集中式数据库 数据是集中的&#xff1b;数据管理是集中的 ②C/S结构 客户端负责数据表服务&#xff1b;服务器负责数据库服务&#xff1b;系统分前后端&#xff1b;ODBC、JDBC ③分布式数据库 物理上分布、逻…

Windows-C盘清理

//1.常用软件&#xff1a; Chrome&#xff1a; C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Code Cache\js C:\Program Files\Google\Chrome\Application\ //2.系统缓存 远程桌面缓存 C:\Users\Administrator\AppData\Local\Microsoft\Termin…

2023年电工(初级)证考试题库及电工(初级)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年电工&#xff08;初级&#xff09;证考试题库及电工&#xff08;初级&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#…