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

        
        

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目集成sharding-jdbc

目录 项目集成sharding-jdbc 1.业务分析 2.数据库构建 3.分库分表策略 项目配置默认数据源 一:导入sharding-jdbc依赖 二:在application文件中编写配置 三:注释掉主配置文件中配置的数据源 注意:这里添加了spring.main.allow…

C++之初识STL(概念)

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

ubuntu中通过源码安装pointnet2_ops_lib

注:本帖所用环境为:ubuntu 24.04、 cuda 12.04 文章目录 1. 克隆 PointNet 源码库2. 安装依赖3. 编译 pointnet2_ops_lib4. 测试安装 1. 克隆 PointNet 源码库 首先,克隆 PointNet 的 GitHub 仓库: git clone https://github.co…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候,未免也会遇见很多繁琐的事情,比如很多错误,需要解决。在以后公司,也不可能让你一个一个搭建hadoop,成千上万的电脑,你再一个个搭建,一个个报错,而且每台…

初始main方法,标识符和关键字

1. 初识Java的main方法 1.1 main方法示例 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }图解: 通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构…

springbootKPL比赛网上售票系统

基于springbootvue实现的KPL比赛网上售票系统 (源码L文ppt)4-068 4.2 系统结构设计 架构图是系统的体系结构,体系结构是体系结构体系的重要组成部分。KPL比赛网上售票系统的总体结构设计如图4-2所示。 图4-2 系统总体架构图 4.3数据…

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…

全面详尽的 PHP 环境搭建教程

目录 目录 PHP 环境搭建概述 在 Windows 上搭建 PHP 环境 使用集成环境 XAMPP 安装步骤 配置和测试 常用配置 手动安装 Apache、PHP 和 MySQL 安装 Apache 安装 PHP 安装 MySQL 配置 PHP 连接 MySQL 在 Linux 上搭建 PHP 环境 使用 LAMP 方案 安装 Apache 安装 …

zabbix入门单机部署

zabbix官网 1进入官网后选择右上角Download 选择你要的版本以及需要的组件,网页下方会自动生成需要操作的步骤 ,跟着步骤一步一步安装即可: 这里跟着官网步骤一步步走下去就可以了 但是需要注意的是安装 yum install centos-release-scl源…

C++20 std::format

一、前言 1、传统 C 格式化的问题与挑战 可读性差:使用 C 中的 printf 和 scanf 家族函数进行格式化输出和输入时,它们的语法较为复杂,难以阅读。在较大的代码项目中,可读性差会导致维护困难。类型安全性差:printf 和…

vue入门小练习

文章目录 1.案例需求2.编程思路3.案例源码4.小结 1.案例需求 一个简易的计算器,其效果如下: 图片切换,其效果如下: 简易记事本,其效果如下: 2.编程思路 1.这个Vue.js应用实现了一个简单的计算器&#x…

中小微企业生产管理利器-- 超轻量生产工单系统

为解决中小微制造企业的生产管理难题,搭贝官方自主设计并推出了一款开箱即用的超轻量「生产工单系统」应用。该系统具备5分钟上手,3小时落地的优势,无需实施即可轻松实现生产任务的敏捷管理,同时支持自定义修改,能够适…

PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在…

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于,UI开发拿来即用,提高开发效率 正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果(用于登录使用&#xf…

Django 请求配置

http请求配置 请求流程 urls.py配置 from first_app import viewsurlpatterns [path(admin/, admin.site.urls),path(test/,views.first_test), ] views.py配置 from django.shortcuts import render,HttpResponse# Create your views here. def first_test(request):prin…

Linux相关概念和重要知识点(6)(make、makefile、gdb)

1.make、makefile (1)什么是make、makefile? 在我们写完代码后,要编译运行,如果有多个.c文件就需要每次都自己用gcc -o来处理,这十分麻烦。当我们想要自定义多个文件的处理时,我们会浪费很多时…

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记

Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…