JVM第一篇 认识java虚拟机

news2024/9/25 17:13:01

目录

1. 什么是java虚拟机

2. java虚拟机分类

2.1. 商用虚拟机

2.2. 嵌入式虚拟机

3.java虚拟机架构

4.java虚拟机运行过程


1. 什么是java虚拟机

       传统意义上的虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的,是操作系统级别的虚拟机。Java虚拟机是一种程序虚拟机,有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

2. java虚拟机分类

2.1. 商用虚拟机

(1)Sun HotSpot
该虚拟机性能优越,是 sun JDK1.3 及以后所有 sun JDK 版本默认的虚拟机,使用最为广泛,一般默认所说的虚拟机就是该虚拟机。
(2)BEA  JRockit
JRockit 虚拟机是 BEA 公司于 2002 年从 Appeal Virtual Machines 收购获得的虚拟机。
它是一款面向服务器硬件和服务端使用场景高度优化过得虚拟机,曾经号称是“世界上速度最快的虚拟机”。
由于专注于服务端应用,它的内部不包含解析器的实现,全部代码都靠即时编译器编译后执行。
(3)IBM J9
J9 虚拟机是 IBM 公司单独开发的高性能虚拟机,它并不独立出售,而是作为 IBM 公司各种产品的执行平台,IBM 把它定义为一个可以适应从嵌入式设备到大型企业级应用的、高可移植性的Java运行平台。
(4)Sun Classic 
这个虚拟机很原始,是 JDK1.0 时代使用的Java虚拟机,是各种虚拟机的鼻祖,它的内部不存在即时编译器,只能使用纯解释的方式运行。
(5)Sun Exact 
这是 Sun 公司在 HotSpot 之外的另一个虚拟机,在 JDK1.2 时代曾短暂的投入过商用,它和 HotSpot 同时开发,但最终被 HotSpot 取代。
(6)Apache Harmony 
Harmony 是 Apache 软件基金会主导的、开源的、独立的、实际兼容与 JDK1.5 和 JDK1.6的虚拟机实现,
它间接催生了 Google Android 平台的 Dalvik 虚拟机,Android 的影响力现在有多大不用多说,目前已经是最成功的的数码设备通用平台。
但是由于它的 TCK 授权问题,直接导致 Apache 与 Oracle 的决裂,从而退出了 JCP 组成,这是近代 Java 阵营遇到的最严重的分裂危机。

2.2. 嵌入式虚拟机

(1)Dalvik
Dalvik 虚拟机是 Google 等厂商合作开发的 Android 移动设备平台的核心组成部分之一,它执行 dex(Dalvik Executable) 文件而不是 class 文件,
使用寄存器架构而不是栈架构,但是它的开发体系与Java有着千丝万缕的关系,可以直接使用大部分的 Java API、dex 文件可以直接从class文件转化而来。
并且在 Android 2.2 中提供了即时编译器的实现,性能大大的提高。

(2)KVM
在 Android、IOS 等智能手机操作系统出现之前,曾广泛应用于手机平台的一种虚拟机。

(3)CDC/CLDC HotSpot
CDC和 CLDC HotSpot 分别是 Sun 针对高端嵌入式设备和中低端嵌入式设备的虚拟机,用来代替 KVM。
 

3.java虚拟机架构

JVM的架构分为三个部分:类加载器、运行时数据区和执行引擎。
(1) 类加载器类加载器是JVM的重要组成部分,它负责将Java类加载到JVM中。类加载器将Java类文件加载到内存中,并将其转换为JVM可以理解的格式。类加载器分为三个层次:启动类加载器、扩展类加载器和应用程序类加载器。启动类加载器是JVM的一部分,它负责加载Java核心类库,如java.lang和java.util等。扩展类加载器负责加载Java扩展类库,如JDBC驱动程序和Java Servlet API等。应用程序类加载器负责加载应用程序的类文件。
(2) 运行时数据区运行时数据区是JVM的内存管理系统,它分为五个部分:方法区、堆、虚拟机栈、本地方法栈和程序计数器。方法区存储类的结构信息、常量池、静态变量和方法代码等。堆是Java程序运行时的内存区域,用于存储对象实例。虚拟机栈用于存储方法的局部变量、操作数栈和返回值等。本地方法栈用于存储本地方法的参数和返回值。程序计数器用于记录当前线程执行的字节码指令地址。
(3) 执行引擎执行引擎是JVM的核心部分,它负责将Java字节码转换为机器码,并执行Java程序。执行引擎分为两个部分:解释器和即时编译器。
解释器将Java字节码逐条解释为机器码,并执行Java程序。即时编译器将Java字节码编译为本地机器码,并执行Java程序。即时编译器可以提高Java程序的执行效率。

4.java虚拟机运行过程

java程序运行过程:字节码文件加载 -> 解释执行/编译执行

简单图:

 复杂图:

 

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

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

相关文章

Python在电路课程中的应用

1 需求 课程中有大量的计算,电路方程、复数计算,之前都是用的MATLAB online,可现在要过期了,只能更换平台。 2 工具 https://www.online-python.com/ Python3 在线工具 | 菜鸟工具 (runoob.com) 3 Sinusoid 章节 涉及到复数计…

AI绘图(11)stable diffusion 如何写好prompt四

在最开始我写了三篇关于prompt的,具体的大家可以跳转来去看,以下给出来链接: AI绘图(3)stable diffusion如何写好prompt 一_牧子川的博客-CSDN博客 AI绘图(4)stable diffusion如何写好prompt …

无涯教程-聚类算法 - Mean-Shift

如前所述,它是在无监督学习中使用的另一种强大的聚类算法,与K均值聚类不同,它不做任何假设,因此,它是一种非参数算法。 均值平移算法基本上是通过将数据点移向最高密度的数据点(即群集质心)来迭代地将数据点分配给群集…

Modbus协议详解1:Modbus的简介

Modbus协议是应用非常广泛的一种通信协议规约,也是最早应用在工业现场的协议。 早在1979年出现工业串行链路以来,Modbus的应用就开始普遍起来,它使得各种自动化设备之间的互相通信得到实现,做嵌入式产品开发的朋友应该不会陌生&am…

RT1050的ADC

文章目录 1 ADC介绍2 ADC框图2.1 外部输入通道2.2 输入电压范围2.3 触发源2.4 时钟源2.5 偏移矫正功能2.5.1 校准 1 ADC介绍 RT1052 有 2 个 ADC,每个 ADC 有 12 位、10 位、8 位可选,每个 ADC 有 16 个外部通道。 ADC具有最高 1MS/s 采样率支持单次或…

ubuntu安装goland

下载并解压goland sudo tar -C /opt/ -xzvf goland-2023.1.3.tar.gz配置应用图标 新建文件: vim /usr/share/applications/goland.desktop文件中写入如下内容: [Desktop Entry] TypeApplication NameGoLand Icon/opt/GoLand/bin/goland.png Exec/op…

uni-app 分不清的全局变量this, uni, $u, vm, uni.$u, this.$u

项目引入了uview,并将uview所有模块指给uniapp全局变量uni uni.$u$u 在登录页面,或者APP.vue打印以下变量: this, uni, $u, vm, uni.$u, this.$u

软件测试之可靠性测试

CNAS标识 软件可靠性测试主要目的是通过在有使用代表性的环境中执行软件,以证实软件需求是否正确实现,为进行软件可靠性估计采集准确的数据,并找出所有对软件可靠性影响较大的错误。可靠性测试的特点是不同于硬件可靠性测试,主要…

TCP协议的重点知识点

TCP协议的重点知识点 TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,工作在传输层,提供可靠的字节流服务。它是互联网协议栈中最重要、最复杂的协议之一,也是面试中常被问到的知识点。本文将详细介绍TCP协议的各个重要概念。 TCP基本特性 TCP主要具有以下基本特性: …

香橙派OrangePi zero H2+ 驱动移远EC200A

1 系统内核: Linux orangepizero 5.4.65-sunxi #2.2.2 SMP Tue Aug 15 17:45:28 CST 2023 armv7l armv7l armv7l GNU/Linux 1.1 下载内核头安装 下载:orangepi800 内核头rk3399链接https://download.csdn.net/download/weixin_37613240/87635781 1.1.1…

去除wps段落柄,删除空白页

如图,有一个段落柄在左端,无法删除,只能编辑。 导致本来是8页内容,现在是9页,多了一空白页 后面新建一个空白页,发现默认会自带一个段落柄,所以有可能这个段落柄是不能消除的,那么如…

SSH报错-Terminal shell path: C:\WINDOWS\System32\cmd.exe 此时不应有

最近接盘了实验室的工作,需要重新配置连接自己的VScode的SSH远程连接服务器,结果配置了一个下午都没搞好,决定记录一下,希望大家避免踩坑。在vscode上遇到的是这个报错: 错误日志 [11:40:12.097] Checking ssh with …

自考《00538 中国古代文学史(一)》2023年4月历年真题答案

自考科目列表,自考本科,题库,自学考试,历年真题 1.“弹歌、断竹、续竹、飞土、逐尖”属于() A.寓言 B.神话 C.传说故事 D.原始歌谣 2.出自《山海经》的神话是() A.女娲补天 B.盘古开天地 C.后羿射日 D.鲧禹治水 3.汉代伏生所传今文《尚书》共计() A.25篇 B.29篇 C.33篇 D.58篇 …

Go的基础运行方式和打包

目录 基础运行方式导入路径 打包技巧相关知识点 基础运行方式 // 文件名可以不是main,但包名和入口函数比如是main // main.go package main // 导入包的时候可以直接导入,也可以导入后指定包名, import ("fmt"godemo "githu…

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码|霸王餐美团/饿了么系统/外卖红包cps粉丝裂变玩法源码下载

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码、霸王餐美团、饿了么系统,粉丝裂变玩源码下载,外卖cps小程序项目,外卖红包cps带好友返利佣金分销系统程序、饿了么美团联盟源码,外卖cps带分销返利后端源码,基于L…

【Linux操作系统】线程的基本知识和创建--循环创建多个子线程

本篇文章主要介绍了线程的概念和作用,线程三级映射的实现,创建线程的方法(讲解pthread_self和pthread_create函数),循环创建多个子线程为例子,同时分析线程之间的全局变量的共享问题,希望可以帮…

fastjson-1.2.24-rce(CVE-2017-18349)fastjson-1.2.47-rce(CNVD-2019-22238)

一.fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349) fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链 影响范围…

LeetCode 刷题第四轮 Offer I + 类型题

目录 剑指 Offer 04. 二维数组中的查找 剑指 Offer 29. 顺时针打印矩阵 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 30. 包含min函数的栈 剑指 Offer 10- I. 斐波那契数列 [类型:记忆优化 递归 / 动态规划] 剑指 Offer 10- II. 青蛙跳台阶问题 [类型&am…

AcWing算法提高课-5.5.2最大公约数

宣传一下 算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 给定整数 N N N,求 1 ≤ x , y ≤ N 1 \le x,y \le N 1≤x,y≤N 且 gcd ⁡ ( x , y ) \gcd(x,y) gcd(x,y) 为素数的数对 ( x , y ) (x,y) (x,y) 有多少对。 输入格式 输…

pandas由入门到精通-数据清洗-缺失值处理

pandas-02-数据清洗&预处理 A.缺失值处理1. Pandas缺失值判断2. 缺失值过滤2.1 Series.dropna()2.2 DataFrame.dropna()3. 缺失值填充3.1 值填充3.2 向前/向后填充文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清…