【Java】JVM基本组成

news2024/9/24 1:32:53

一、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运行期间的方法调、数据对象统一存放至运行时数据区。

        
        

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

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

相关文章

文件服务器FastDFS 消息队列中间件RabbitMQ

新标签页 (chinaunix.net) FastDFS - Browse Files at SourceForge.net 一、FastDFS Tracker和Storage: tracker用来管理所有的storage,只是管理服务器,负责负载均衡。 storage是存储服务器,每一个storage服务器都是一个单独的个…

计算机毕业设计之:基于微信小程序的疫苗预约系统的设计与实现(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

Shiro rememberMe反序列化漏洞(Shiro-550)

开启环境抓包验证Shiro框架 使⽤BurpSuite进⾏抓包,在请求包中的cookie字段中添加 rememberMe123; ,看响应包 header中是否返回 rememberMedeleteMe 值,若有,则证明该系统使⽤了Shiro框架: 使用工具爆破密钥爆破利用…

论文大杀器!分享4款ai论文写作工具软件

在当今学术研究和论文写作领域,AI技术的应用已经变得越来越普遍。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。本文将重点介绍四款优秀的AI论文写作工具,并特别推荐千笔-AIPassPaper。 一、千笔-AIPassPaper 传送门…

2024寻找那些能精准修改PDF内容的工具

如今,我们使用 PDF 文档的频率不断攀升,很多时候收到的表格等资料都是 PDF 格式。若先进行格式转换后编辑,再转换回 PDF 格式,着实有些麻烦。那么,pdf怎么编辑修改内容呢?在这篇文章中,我将为大…

python爬虫案例——抓取链家租房信息

文章目录 1、任务目标2、分析网页3、编写代码1、任务目标 目标站点:链家租房版块(https://bj.lianjia.com/zufang/) 要求:抓取该链接下前5页所有的租房信息,包括:标题、详情信息、详情链接、价格 如: 2、分析网页 用浏览器打开链接,按F12或右键检查,进入开发者模式;因…

防火墙--NAT技术,基于源NAT,NAT服务器,双向NAT

文章目录 防火墙--NAT技术一、基于源NAT**方式**:NAT No-PATNAPT出接口地址方式Smart NAT三元组 NAT 二、基于服务器的NAT多出口场景下的NAT Server 三、双向NAT 防火墙–NAT技术 基于源NAT:用于将内部网络的私有IP地址转换为公共IP地址,以便…

使用 IntelliJ IDEA 连接到达梦数据库(DM)

前言 达梦数据库是一款国产的关系型数据库管理系统,因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动: 访问达梦在线服务平台网站或通过其他官方渠道…

Matlab|基于遗传模拟退火算法的风电功率聚类分析

目录 主要内容 部分代码 结果一览 下载链接 主要内容 模糊C-均值聚类,也称FCM,是比较常用的一种聚类算法,该算法利用几何贴进度的概念将不同数据分配到不同聚类群中,但是作为局部搜索优化算法,初值选择不…

Conda虚拟环境配置常见问题记录

搞深度学习的,总有被虚拟环境搞得头大的时候,特别是涉及到CUDA,Torch ,Torchvision 版本适配的问题。这两天因为在原来的环境中装了几个包,导致原来的环境崩了,搞了一天的时间又重新配了环境,中…

塑料瓶回收标志分级检测系统源码分享

塑料瓶回收标志分级检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

Etcd权限认证管理

1 查看是否开启权限认证 ctl auth status 2 开启权限认证 ctl auth enable。开启后每一条命令都要加上用户 --userroot:root(root默认最高权限) 3 创建其他用户 ctl user add user1 --user用户名:密码 4 创建角色 ctl role add testR --user 5 为角色添加权限 ctl role g…

python和pyqt-tools安装位置

一.python的安装位置 1.查询安装的python的位置 先查询python,然后输入import sys和sys.path 二.python-tools的安装位置 找到python的文件后按下图路径即可查到tools的文件

OpenAI o1团队突破性论文:『过程推理』中数学推理能力大幅提升,从正确中学习的新方法

原创 超 近年来,大型语言模型(LLMs)在复杂的多步推理任务中取得了令人瞩目的进展。这些模型能够生成逐步的思维链,解决从小学数学到高等微积分的各种问题。然而,即使是最先进的模型也常常陷入逻辑陷阱,产生看似合理但实际错误的推…

PHP校园外卖跑腿小程序带后台(商业版)

有需要请加文章底部Q哦 可远程调试 PHP校园外卖跑腿小程序带后台(商业版) 一 介绍 此校园外卖跑腿小程序端基于原生开发,后端基于ThinkPHP5框架开发,数据库mysql,系统角色分为用户,商家(自配送),跑腿员,管…

Python+requests+pytest+allure自动化测试框架

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2、目录结构 base utils …

如何使用ssm实现社区流浪动物救助领养系统的设计与开发+vue

TOC ssm666社区流浪动物救助领养系统的设计与开发vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安…

kafka 消费者线程安全问题详细探讨

内容概要 主要内容 常见错误案例 下面这段代码大概逻辑 初始化时 实例化KafkaConsumer, 开启线程拉取消息并且处理 资源释放回调 停止线程、调用kafkaConsumer.close进行资源释放 表面上没有问题,但实际上可能出现线程安全问题,因为poll 和 close 两…

python按照财年分组案例

有如下数据:需要按照如下要求进行分组。 需求是对Site进行分组 条件当值是Act得时候,分组名字就是 条件当值是Rebase*得时候,分组名字就是FY?1/?1 条件当值是FIRM 得时候,分组名字就是 每年得7月到次年得6月为一个财年&#xff…

C++之初识STL(概念)

STL(标准模板库) STL广义分类为:容器,算法,迭代器 * **容器**和**算法**之间通过**迭代器**进行无缝连接 意义:C的**面向对象**和**泛型编程**思想,目的就是**复用性的提升** STL六大组件 1. 容…