JVM(学习原因,虚拟机,作用,位置,组成,各部分用途,执行流程,架构类型)

news2024/12/28 22:50:42

JVM概述

这里写目录标题

  • JVM概述
      • 1.1为什么学习 JVM
      • 1.2虚拟机
      • 1.3JVM 作用
      • 1.4JVM的位置
      • 1.5JVM组成
      • 1.6各个组成部分的用途
      • 1.7JVM代码的执行流程
      • 1.8JVM架构类型

1.1为什么学习 JVM

中高级程序员必备技能

项目管理,性能调优

1.2虚拟机

 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执 行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。

 大名鼎鼎的 VMware 就属于系统虚拟机,它是完全对物理计算机的仿真,提供了一 个可运行完整操作系统的软件平台。程序虚拟机典型的代表就是 java 虚拟机了,它专门为 执行某个单个计算机程序而设计。在 java 虚拟机中执行的指令我们称为 java 字节码指令。

 Java 虚拟机是一种执行 java 字节码文件的虚拟计算机,它拥有独立的运行机制。

Java 技术的核心就是 java 虚拟机,因为所有的 java 程序都运行在 java 虚拟机内部。

1.3JVM 作用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vjwjEGA2-1678443764489)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734403282.png)]

Java 虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对 应平台上的机器码指令执行,每一条 java 指令,java 虚拟机中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪儿

特点:

一次编译到处运行

自动内存管理

自动垃圾回收功能

现在的 JVM 不仅可以执行 java 字节码文件,还可以执行其他语言编译后的字节码文件,是一 个跨语言平台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J74aZdWQ-1678443764491)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734533127.png)]

1.4JVM的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRYG29eG-1678443764491)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734564737.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUhb9UrO-1678443764491)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734579736.png)]

1.5JVM组成

1.类加载器(ClassLoader)

2.运行时数据区(Runtime Data Area)

3.执行引擎(Execution Engine)

4.本地库接口(Native Interface)

简图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VrIMSFI-1678443764492)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734632649.png)]

详细图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0UOJ6jb-1678443764492)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641734685267.png)]

1.6各个组成部分的用途

程序在执行之前先要把 java 代码转换成字节码(class 文件),jvm 首先需要 把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 的运行时数据区(Runtime Data Area),而字节码文件是 jvm 的一指 令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析 器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由 CPU 去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能,这就是这 4 个主要组成部分的职责与功能

而我们通常所说的 JVM 组成指的是运行时数据区(Runtime Data Area),因为通常需要程序员调试分析的域就是“运行时数据区”,或者更具体的来说就是“运行时数据区”里面的 Heap(堆)模块。

1.7JVM代码的执行流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWbu7zbu-1678443764492)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641735010325.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXUM3TX2-1678443764493)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641735046110.png)]

Java 编译器编译过程中,任何一个节点执行失败就会造成编译失败。虽然各个平台的 java 虚拟机内部实现细节不尽相同,但是它们执行的字节码内容却是一样的。

JVM 主要任务就是负责将字节码装载到其内部,解释/编译为对应平台上的机器 指令执行。JVM 使用类加载器(Class Loader)装载 class 文件。 类加载完成后,会进行字节码校验,字节码校验通过之后 JVM 解释器会把字节码翻译成机器码交由操作系统执行。 但不是所有的代码都是解释执行,JVM 对此作了优化,比如 HotSpot 虚拟机,它本身提供了 JIT(Just In Time)编译器.

1.8JVM架构类型

Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另一种指令集架构 是基于寄存器的指令集架构.

两种架构之间的区别:

基于栈式架构的特点

设计和实现更简单,适用于资源受限的系统.

使用零地址指令方式分配,其执行过程依赖于操作栈,指令集更小,编译器容易实现.不需要硬件支持,可移植性好,更好实现跨平台.

基于寄存器式架构特点:

指令完全依赖于硬件,可移植性差.

性能优秀,执行更高效.

完成一项操作使用的指令更少

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JkfylEPU-1678443764493)(C:\Users\封纪元\AppData\Roaming\Typora\typora-user-images\1641735349566.png)]

使用 javap -v class 文件可以将 class 文件反编译为指令集.

所以由于跨平台的设计,Java 指令集都是根据栈来设计的,不同 CPU 架构不同,

所以不能设计为基于寄存器的.

优点是跨平台,指令集小,编译器容易实现.

缺点是性能下降,实现同样功能需要更多的指令

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

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

相关文章

Linux基础命令-ss显示socket信息

Linux基础命令-netstat显示网络状态 ss 一. 命令介绍 先使用手册查看命令介绍信息 NAME ss - another utility to investigate sockets DESCRIPTION ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and …

Flink从入门到精通系列(一)

1、Flink概述 Apache Flink 是一个框架和分布式处理引擎,用于在, 无边界和有边界数据流上进行有状态的计算 ,Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 Apache Flink 功能强大,支持开发…

使用自定义数据绘制脑地形矩阵图

最近做数据处理,想画点自己想要的图,但是找遍了各种库,都没有一个函数可以实现我想要的效果,所以关机时刻还得靠自己啊,自己动手丰衣足食,记录一下实现过程,方便以后查阅。 使用自定义数据绘制脑地形矩阵图 对于处理后的数据我想实现下图所示的效果,以矩阵的形式排列脑…

PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局

目录 一、数据库建表 1 建表 2 插入数据 3 查看表数据 二、建立项目 1 新建项目 2 appMain.py 3 myMainWindow.py 4 myChartView.py 2.4.1 提升的后果 2.4.2 QmyChartView类说明 2.4.3 添加代码 三、修改myMainWindow.py程序,添加功能 1 打开数据库 …

第十届省赛——8人物相关性分析(数组)

题目:试题 H: 人物相关性分析时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分【问题描述】小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob有多少次同时出现。更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是&a…

微小目标识别研究(2)——基于K近邻的白酒杂质检测算法实现

文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的,并没有直接调用相关的库完整的代码——调用ope…

千川投放50问(完)!如何跑出高投产?

第四十一问:计划初期成本很高,是否要关掉重新跑?首先看一下是不是初期回传延迟导致的成本偏高。如果成本没有高的,不建议暂停,先观察一段时间数据,给它一点学习时间。当系统积累过足够的模型之后&#xff0…

08-Oracle游标管理(定义,打开、获取数据及关闭游标)

目标 1.确定何时需要显示游标2.声明、打开和关闭显示游标3.从显示游标中提取数据4.了解与游标有关的属性5.使用游标FOR循环检索游标中的数据6.在游标FOR循环的子查询中声明游标7.评估使用逻辑运算符结合在一起的布尔条件游标 1、在使用一个PL/SQL块来执行DML语句或只返回一行结…

2月更新 | Visual Studio Code Python

我们很高兴地宣布,2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出!此版本包括以下改进:从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布:改…

性能优化之HBase性能调优

HBase是Hadoop生态系统中的一个组件,是一个分布式、面向列存储的内存型开源数据库,可以支持数百万列(MySQL4张表在HBase中对应1个表,4个列)、超过10亿行的数据存储。可用作:冷热数据分离HBase适合作为冷数据…

坐标系、视窗体(裁剪区域),存储着色器

坐标系 两种常见的投影/坐标系,正交和透视,实际上只是特定的4x4变换矩阵。啥都不规定默认的就是-1.0~1.0的笛卡尔坐标系。 正交: 在opengl的核心框架下,没有提供任何内置渲染管线,所以在提交一个几何图形进行渲染之前&…

Ubuntu Protobuf 安装(测试有效)

安装流程 下载软件 下载自己要安装的版本:https://github.com/protocolbuffers/protobuf 下载源码编译: 系统环境:Ubuntu16(其它版本亦可),Protobuf-3.6.1 编译源码 cd protobuf# 当使用 git clone 下来的…

【C语言】操作符详解总结(万字)

操作符详解1. 操作符分类2. 算术操作符3. 移位操作符3.1 整数的二进制是怎么形成的3.2 左移操作符3.3 右移操作符4. 位操作符5. 赋值操作符6. 单目操作符6.1 单目操作符介绍6.2 sizeof 和 数组7. 关系操作符8. 逻辑操作符9. 条件操作符9.1 练习19.2 练习210. 逗号表达式11. 下标…

【Vue】vue2导出页面内容为pdf文件,自定义选中页面内容导出为pdf文件,打印选中页面内容,预览打印内容

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、安装html2canvas和jspdf二、导出pdf使用步骤1.在utils文件夹下创建htmlToPdf.js2.在main.js中引入3.在页面中使用三、打印预览1. 引入print-js2.页面中impor…

PG数据库实现高可用方案(包括通用型方案Corosync+pacemaker协作)

实现高可用方案首先了解一下高可用集群高可用:透明切换,故障切换,连接管理器/集群管理器pgpool-Ⅱ:连接池、复制、负载均衡功能PatroniCorosyncpacemaker高可用解决方案Corosyncpacemakercorosyncpacemaker架构协作资源分配&#…

功耗降低99%,Panamorph超清VR光学架构解析

近期,投影仪变形镜头厂商Panamorph获得新型VR显示技术专利(US11493773B2),该专利方案采用了紧凑的结构,结合了Pancake透镜和光波导显示模组,宣称比传统VR方案的功耗、发热减少99%以上,可显著提高…

通讯录(C++实现)

系统需求通讯录是一个可以记录亲人、好友信息的工具。本章主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录…

【006】Redis主从/哨兵/分片集群Docker搭建

项目源码合集 https://gitee.com/qiuyusy/small-project-study 搭建过程疯狂踩坑,记录一下希望各位少走弯路 目录主从搭建配置文件redis.conf运行容器测试优化哨兵集群配置文件运行容器测试代码读写分离分片集群mkdir -p /opt/docker/redis_study/redis_0/conf mkdir -p /opt/…

藏经阁(五)温湿度传感器 SHT3x-DIS 手册 解析

文章目录芯片特性芯片内部框图芯片引脚定义芯片温湿度范围芯片寄存器以及时序讲解信号转换公式芯片特性 湿度和温度传感器完全校准,线性化温度补偿数字输出供电电压范围宽,从2.4 V到5.5 VI2C接口通讯速度可达1MHz和两个用户可选地址典型精度 2% RH和 0.…

Python 二分查找:bisect库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…