【Java】JVM基本组成
一、JDK、JRE、JVM
JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具;
JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库+JVM;
JVM:全称“Java Virtual Machine”Java 虚拟机,用于运行 Java 应用程序。

二、Java程序执行过程
1. 编译:通过 javac 命令,调用 JDK 编译器,将 *.java 源文件编译成 *.class 字节码文件。
2. 执行:通过 java 命令,调用 JVM 虚拟机,执行 *.class 字节码文件。

三、Java程序的跨平台
1. 计算机平台是什么
我们通常把CPU 处理器与操作系统构成的系统架构,称为计算机平台。
2. 跨平台的原因
通用的字节码:不同的平台,相同的源代码,编译的字节码是相同的,所以字节码文件可以在不同平台“通用”;
不同的JVM:不同的平台,执行字节码时,都需要各自的 虚拟机版本,用于将字节码翻译成当前平台可以执行的机器码指令。
四、静态编译器
通过 JDK 提供的静态编译器,将 Java 源文件编译成字节码文件。
编译过程包括:
(1)词法分析:通过空格分隔出源代码中的单词、操作符、控制符等信息,将其形成 token 信息流,传递给语法解析器。
(2)语法分析:将 token 信息流按照 Java 语法规则,组装成一颗语法树。
(3)语义分析:对语法树进行关键字使用、类型匹配、作用域等语法检查。
(4)字节码:当语义分析完成后,可以生成字节码。

五、字节码
当1个 Java 源文件被编译后,就会按照 JVM 规范和字节码定义,产生1个class 字节码文件,文件内容由 10 个固定部分组成。
六、JVM执行方式
JVM 以解释+编译混合模式,执行字节码文件。
1. JVM 的执行方式以解释执行为主。执行过程中,JVM 将每个字节码文件中的每个指令,通过解释器转换成当前平台可以识别的机器码,然后交给CPU 执行。
2. 为了提高执行效率,JVM 还会在运行期间,JVM 通过热点代码的统计分析,识别高频的方法调用,循环体、公共模块等,当超过阈值时,JVM 会基于 JIT 即时编译器( just-in-time compiler )将热点代码转换成机器码,直接交给 CPU 执行,提高执行效率。
a. client 模式下默认阈值是1500次,在Server模式下是 10000 次。
JVM 解释器:程序执行的时候,解释器首先发挥作用,省去了编译器编译时间,加快程序的执行效率。
JIT 编译器:在程序运行过程中,随着时间的推移, JIT 开始慢慢发挥了作用,把热点代码编译成本地代码后,以后执行相同的代码,即可直接交给CPU 执行,带来更高的执行效率。
七、类加载器
字节码必须通过类加载器,通过加载、验证、解析等校验步骤,将字节码文件中的类,加载至 JVM 的中运行时数据区,才可以执行字节码。

八、垃圾收集器
JVM 在运行期间,通过Garbage Collctor垃圾收集器,定期对运行时数据区进行垃圾对象的回收,从而实现了内存自动管理。
九、JVM组成结构
JVM由类加载器、运行时数据区、 JVM 解释器、 JIT 即时编译器、垃圾回收器、本地方法库等部分组成。
由类加载器完成字节码文件的加载验证和解析,存储至运行时数据区,并由执行引擎中的解释器,完成字节码到机器码的解释执行。同时进行热点代码的统计分析,调用 JIT 即时编译器将字节码直接编译成机器码,提高执行效率。JVM运行期间的方法调、数据对象统一存放至运行时数据区。

相关文章:
【Java】JVM基本组成
一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …...
解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!
环境介绍 每人搭建的环境不一样,情况不一样,但是原因都是下面几种: wvp配置不当网络端口未放开网络不通 我搭建的环境: WVP服务:windows下,用idea运行的源码 ZLM服务:虚拟机里 问题描述 1.…...
淘宝商品详情接口item_get响应参数解析:props、props_list、prop_img
在电商数据分析和应用开发中,淘宝商品详情接口item_get是一个至关重要的工具。通过该接口,开发者可以高效地获取淘宝平台商品的详细信息,从而优化商品展示、搜索、推荐等功能,提升用户体验和转化率。本文将详细解析item_get接口的…...
Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)
一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV(Open Source Computer Vision Library,开源计算机视觉库)的一个重要更新版本,该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX(Open Neu…...
Pandas_iloc_loc_哪个是inclusive哪个是exclusive
iloc 和 loc 包括不包括结尾写的那个行(列)? 不一样! iloc[istart:iend] exclusive on iend 不包括结尾那行(列)! loc[start:end] inclusive on end 包括结尾那行(列)&am…...
python是什么语言写的
Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火,可有人提问,这么火的语言它的底层又是什么语言编写的呢? python是C语言编写的,它有很多包也是用C语言写的。 所以说,C语言还是很…...
python编程,把所有子目录和文件输出到文本文件
要将所有子目录和文件输出到文本文件,你可以使用Python的os模块来遍历目录结构,并将结果写入文件。以下是一个简单的Python脚本示例,它会递归地遍历指定目录,并将每个子目录和文件的相对路径写入到一个文本文件中: im…...
使用 IntelliJ IDEA 连接到达梦数据库(DM)
前言 达梦数据库是一款国产的关系型数据库管理系统,因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动: 访问达梦在线服务平台网站或通过其他官方渠道…...
【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...
Java中的事件(动作监听-ActionListener)
(一)、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。 &#…...
STM32篇:开发环境安装
编程语言:C语言 需要安装的软件有两个:Keil5 和 STM32CubeMX 一.Keil5 的安装 使用 Keil4 写 STM32 代码其实也是可以,但需要很复杂的配置,不建议新手操作。 比较推荐 Keil5 编写 STM32 ,只需要一些简单的设置就可…...
AIGC实战——多模态模型Flamingo
AIGC实战——多模态模型Flamingo 0. 前言1. Flamingo 架构2. 视觉编码器3. Perceiver 重采样器4. 语言模型5. FIamingo 应用小结系列链接0. 前言 我们已经学习了文本生成图像模型 DALL.E 2,在本节中,我们将探索另一种多模态模型 Flamingo,它可以根据给定文本和视觉数据流生…...
如何在WordPress中添加事件Schema(分步指南)
如果你正在举办一个在线活动,那么你可能正在寻找通过网络宣传的方法。此时,模式标记可以帮助你在搜索引擎结果中提高活动的可见性。 活动模式将帮助谷歌和其他搜索引擎更好地理解你的活动详情,使它们能够在活动列表、丰富摘要和谷歌知识面板…...
守护企业资产安全:企业微信群禁止互加好友操作指南!
为了防止其他公司的人员混入发起私聊,导致客户资源流失,禁止互加好友十分重要。而软件自带群防骚扰功能,设置好相关规则后,群内成员触发规则会被踢出群聊。 进入工作台-点击更多-选择客户群-选择防骚扰-选择配制企业成员防骚扰规…...
【QT基础】创建项目项目代码解释
目录 前言一,使⽤Qt Creator 新建项目1. 新建项目2. 选择项⽬模板3. 选择项⽬路径4. 选择构建系统5. 填写类信息设置界⾯6. 选择语⾔和翻译⽂件7. 选择Qt套件8. 选择版本控制系统9. 最终效果 二,项目代码说明1. main.cpp文件2. Widget.h文件3. Widget.cp…...
【数据结构】对象的比较
Java数据类型分为基本数据类型和引用类型,基本数据类型可以直接比较大小,对于引用类型的变量不能直接比较。下面来讲解Java对象的比较。 目录 equals比较 Comparble接口类的比较 基于比较器比较 equals比较 equals是Object类中的方法,只能…...
代码随想录八股训练营第四十天| C++
目录 一、什么是菱形继承? 1.1.菱形继承的示例: 1.2.菱形继承的问题: 1.3.解决菱形继承问题: 二、C中的多线程同步机制? 2.1.互斥锁(Mutex): 2.2.递归互斥锁(Recursive Mutex)…...
【C++】10道经典面试题带你玩转二叉树
🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…...
【裸机装机系列】13.kali(ubuntu)-优化-自定义grub启动界面个性化背景
推荐阅读: 1.kali(ubuntu)-为什么弃用ubuntu,而选择基于debian的kali操作系统 当裸机安装了linux之后,开机的时候总会让人误会是黑客,还是优化一下开机界面吧,毕竟是日常开发使用。 注:修改有grub启动项有…...
数组高阶应用(C++版)
在C中,普通的数组(C-style array)、std::initializer_list 、 std::array和std::vector 是四种不同的容器类型,它们各自有不同的特性和用途。下面是对它们进行详细比较和解释。 1. 普通数组(C-style Array)…...
低代码平台推荐:零基础业务人员专属
在数字化转型加速的当下,低代码已成为打破IT资源瓶颈的关键抓手。本文专为零基础业务人员深度拆解零门槛低代码平台的选型逻辑与落地路径。通过7大核心问答,系统梳理从技能门槛、平台评估到架构融合的实战经验。据行业调研显示,采用成熟低代码…...
赛事直播预告|高含金量智能车竞赛,邀你逐梦无人驾驶赛道!
简 介: 第二十一届全国大学生智能汽车竞赛创意组"智慧城市Robotaxi挑战赛"即将启动。作为教育部认可的A类国家级学科竞赛,赛事聚焦纯视觉无人驾驶技术,依托百度多模态能力与边缘AI算力,考验参赛者的视觉、语言、执行融合…...
避坑指南:你的Harmony和Seurat SCTransform连用顺序对了吗?一个参数引发的聚类差异
Harmony与Seurat SCTransform联用避坑指南:参数细节如何影响聚类结果 在单细胞RNA测序数据分析中,数据预处理和批次校正对最终结果的可靠性至关重要。许多研究者已经熟悉了Seurat流程中的SCTransform标准化方法和Harmony批次校正工具的基本使用ÿ…...
大模型时代,小白程序员如何抓住机遇?阿里高薪Offer背后的大模型学习指南(收藏版)
文章主要介绍了阿里在大模型领域的强势发展,包括高薪Offer和招聘趋势,强调了AI技能的重要性。作者建议小白和程序员学习大模型技术,并推荐了“派聪明RAG项目”作为学习资源。同时,文章还探讨了AI工具的实际应用和挑战,…...
AES128加密实战:用C语言写一个加密函数,并集成到你的STM32项目里
AES128加密实战:用C语言写一个加密函数,并集成到你的STM32项目里 在物联网设备开发中,数据安全传输是至关重要的环节。想象一下,你的STM32设备需要通过无线网络发送传感器数据到云端,如果这些数据以明文传输࿰…...
别再死记硬背了!用这5个Shapely实战案例,轻松搞定GIS数据处理
用5个实战案例解锁Shapely:告别枯燥API,玩转GIS数据处理 第一次接触Shapely时,我也曾被那些晦涩的几何术语和冰冷的API文档劝退。直到接手一个城市绿化分析项目,被迫在三天内完成公园边界处理,才真正体会到这个库的魔力…...
agent 学习路径解析 学习资源分享
文章目录 先给结论:你接下来不要优先读 GLM-4.5你对 agent 的轻视,有一半对,一半错关于 Claude Code 泄露:你应该学“架构收获”,不要沉迷“源码猎奇”你提到的 learn-claude-code 仓库:值得看,…...
长期项目使用Taotoken聚合API在稳定性与成本上的综合感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期项目使用Taotoken聚合API在稳定性与成本上的综合感受 在最近一个持续数月的实际开发项目中,我们选择将Taotoken作为…...
告别卡顿!手把手教你用UltraISO给老旧笔记本装上OpenEuler 22.03 LTS(保姆级BIOS设置指南)
告别卡顿!手把手教你用UltraISO给老旧笔记本装上OpenEuler 22.03 LTS(保姆级BIOS设置指南) 老旧笔记本性能跟不上现代操作系统?别急着淘汰它们!OpenEuler作为一款轻量级Linux发行版,特别适合为老设备注入新…...
基于C++实现(控制台)图书管理系统
♻️ 资源 大小: 1.70MB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87430290 图书管理系统 题目概述 首先认为大多数同学好像都计划设计游戏,我们想设计不一样的,再因为以前大家都做过一次手机的通讯录&#x…...
