JVM第一篇 认识java虚拟机

目录

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.mzph.cn/news/63615.shtml

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

相关文章

jsch网页版ssh

使用依赖 implementation com.jcraft:jsch:0.1.55Server端代码 import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; import o…

【C++进阶(三)】STL大法--vector迭代器失效深浅拷贝问题剖析

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 vector-下 1. 前言2. 什么是迭代器失效?3. 迭代…

GitHub 标星 15w,如何用 Python 实现所有算法?

学会了 Python 基础知识,想进阶一下,那就来点算法吧!毕竟编程语言只是工具,结构算法才是灵魂。 新手如何入门 Python 算法? 几位印度小哥在 GitHub 上建了一个各种 Python 算法的新手入门大全。从原理到代码&#xf…

ClickHouse进阶(六):副本与分片-2-Distributed引擎

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 📌订阅…

【项目设计】高并发内存池(Concurrent Memory Pool)

目录 1️⃣项目介绍 🍙项目概述 🍙知识储备 2️⃣内存池介绍 🍙池化技术 🍙内存池 🍙内存池主要解决的问题 🍥内碎片 🍥外碎片 🍙malloc 3️⃣ 定长内存池设计 4️⃣ 项…

channel并发编程

不要通过共享内存通信,要通过通信共享内存。 channel是golang并发编程中一种重要的数据结构,用于多个goroutine之间进行通信。 我们通常可以把channel想象成一个传送带,将goroutine想象成传送带周边的人,一个传送带的上游放上物品…

打破对ChatGPT的依赖以及如何应对ChatGPT的错误和幻觉

​ OpenAI的ChatGPT是第一个真正流行的生成式AI工具,但它可能不是最好的。现在是时候扩大你的AI视野了。 ChatGPT成为了基于大语言模型(LLM)的聊天机器人的同义词。但是现在是时候停止对ChatGPT的痴迷,开始发现这个新世界中强大的替代品了。 首先&a…

【内推码:NTAMW6c】 MAXIEYE智驾科技2024校招启动啦

MAXIEYE智驾科技2024校招启动啦【内推码:NTAMW6c】 【招聘岗位超多!!公司食堂好吃!!】 算法类:感知算法工程师、SLAM算法工程师、规划控制算法工程师、目标及控制算法工程师、后处理算法工程师 软件类&a…

python 深度学习 解决遇到的报错问题4

目录 一、DLL load failed while importing _imaging: 找不到指定的模块 二、Cartopy安装失败 三、simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 四、raise IndexError("single positional indexer is out-of-bounds") 五、T…

操作系统中一些零散的知识点

第三章 内存管理 在虚拟内存系统中,虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的,而虚拟内存的实际容量是受到“内存大小磁盘空间大小”、“地址线位数”共同制约,取二者最小值实现虚拟内存管理必须有…

Lvs+KeepAlived高可用高性能负载均衡

目录 1.环境介绍 2.配置keepalived 3.测试 1.测试负载均衡 2.测试RS高可用 3.测试LVS高可用 3.1测试lvs主服务宕机 3.2.测试lvs主服务器恢复 4.我在实验中遇到的错误 1.环境介绍 环境:centos7 RS1---RIP1:192.168.163.145 VIP 192.168.163.200 RS2---RIP2…

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…

【Interaction交互模块】ActionPublisher/ActionReciever

文章目录 需求案例原理0、相应准备1、发布器、接收器2、将把两者联系起来3、前提状态 补充 需求 Interactor只能将一个动作(如按下手柄抓取键),传递给Interactble,如果要传两个或多个,就需要用发布器和接收器。 案例 右手柄抓取…

小疆智控CANOpen转PROFINET网关连接EA180C CANOPEN总线型伺服配置案例

1、首先新建一个工程,在CanOpen转Profinet网关配置软件中添加主站设备,如下图; 2、在CanOpen转Profinet网关设备点击导入EA180C CANOPEN总线型伺服 EDS 文件,右键添加从属设备; 3、设备设置站地址,如图&…

云原生架构:在云环境中构建弹性应用

随着云计算技术的快速发展,云原生架构已经成为现代软件开发的热门话题。作为一种在云环境中构建和运行应用程序的方法论,云原生架构强调弹性、可扩展性和灵活性,使开发者能够更好地应对复杂的业务需求。本文将深入探讨云原生架构的核心概念、…

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…

一种改进多旋翼无人机动态仿真的模块化仿真环境研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ChatGPT 总结前端HTML, JS, Echarts都包含哪些内容

AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.csdn.cn/zBytu

Web3.0:重新定义互联网的未来

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Web3.0:重新定义互联网的未来 Web3.0是指下一代互联网,也称为“分布式互联网”。相比于Web1.0和Web2.0,Web3.0具有更强的去中心化、…

京东API接口解析,实现获得JD商品评论

要获取京东商品评论,需要使用京东的开放平台API接口。以下是一个基本的示例,解析并实现获取JD商品评论的API接口。 首先,你需要访问京东开放平台并注册一个开发者账号。注册完成后,你需要创建一个应用并获取到API的权限。 在获取…