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

【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&#xff09…...

【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&#xff09…...

【Flutter for OpenHarmony 】三方库 infinite_scroll_pagination 鸿蒙化适配实战:列表分页加载全指南

📱 Flutter for OpenHarmony 三方库 infinite_scroll_pagination 鸿蒙化适配实战:列表分页加载全指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 哈喽大家好呀~我是一名正在学习Flutter跨平台开发…...

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录

千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录 1. 千问3.5-2B模型介绍 千问3.5-2B是Qwen系列中的小型视觉语言模型(VL),它能够同时理解图片内容和处理自然语言。这个模型特别适合那些需要在有限硬件资源上…...

Domain Randomization不只是“乱调参数”:一份给自动驾驶感知开发的避坑指南

Domain Randomization不只是“乱调参数”:一份给自动驾驶感知开发的避坑指南 在自动驾驶感知算法的开发过程中,仿真环境训练已经成为不可或缺的一环。许多团队在Carla或LGSVL等仿真平台上投入大量精力进行模型训练,却在真实路测时遭遇性能断崖…...

seo优化服务价格一般是多少_网站快速排名对网站访问量有什么影响

SEO优化服务价格一般是多少_网站快速排名对网站访问量有什么影响 在当前数字化经济的浪潮中,网站的流量和排名直接决定了企业的成功与否。SEO优化服务价格一般是多少?更重要的是,网站快速排名对网站访问量有什么影响呢?这两个问题…...

嵌入式系统UI概念设计:Pixel Aurora Engine快速生成设备交互界面原型

嵌入式系统UI概念设计:Pixel Aurora Engine快速生成设备交互界面原型 1. 嵌入式UI设计的痛点与解决方案 在智能手表、工控屏等嵌入式设备开发中,UI设计往往是最耗时的环节之一。传统设计流程需要设计师反复修改效果图,工程师再根据图纸实现…...

人脸分析系统快速上手教程:一键部署智能人脸检测工具

人脸分析系统快速上手教程:一键部署智能人脸检测工具 1. 系统介绍与核心功能 1.1 什么是人脸分析系统 人脸分析系统(Face Analysis WebUI)是一个基于InsightFace框架的智能人脸检测与分析工具。它能够自动识别图片中的人脸,并提…...

京东 SPU/SKU 数据接口全解读:商品详情 API 文档(2026 最新版)

京东商品详情 API 体系以SPU(标准产品单元)聚合、SKU(库存单元)明细为核心设计,覆盖商家开放平台(JOS)、京东联盟两大核心场景,支持单品 / 批量查询、全字段 / 指定字段返回&#xf…...

Phi-3-mini-4k-instruct-gguf保姆级教程:从CSDN GPU平台访问到结果导出全流程

Phi-3-mini-4k-instruct-gguf保姆级教程:从CSDN GPU平台访问到结果导出全流程 1. 认识Phi-3-mini-4k-instruct-gguf Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理问答、文本改写、摘要整理以及简短创作等任务…...

YOLO X Layout在新闻行业的应用:版面自动排版

YOLO X Layout在新闻行业的应用:版面自动排版 每天清晨,当大多数人还在睡梦中时,新闻编辑部的排版编辑已经开始了一天中最紧张的工作:将记者们连夜赶制的稿件、摄影师捕捉的精彩瞬间、设计师制作的图表,精准地排列在有…...

OpenClaw移动办公:Phi-3-mini-128k-instruct通过钉钉审批电子合同

OpenClaw移动办公:Phi-3-mini-128k-instruct通过钉钉审批电子合同 1. 为什么需要移动审批电子合同? 上周三我在高铁上收到法务同事的紧急消息:"有个供应商合同今天必须签完,但关键条款需要你确认"。当时手边既没电脑也…...