JVM上篇之虚拟机与java虚拟机介绍

目录

虚拟机

java虚拟机

简介

特点

作用

位置

整体结构

类装载子系统

运行时数据区

java执行引擎

Java代码执行流程

jvm架构模型

基于栈式架构

基于寄存器架构

总结

jvm的生命周期

1.启动

2.执行

3.退出

JVM的发展历程


虚拟机

所谓虚拟机,指的是一台虚拟的计算机。它是一款软件,用来执行一系列的虚拟计算机命令。虚拟机可以分为系统虚拟机和程序虚拟机。

系统虚拟机:对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台

程序虚拟机:专门为了执行单个计算机程序而设计,在Java虚拟机中执行指令

java虚拟机

Java是目前最广泛的软件开发平台之一,拥有完善且不断壮大的社区,作为一个平台Java虚拟机扮演者举足轻重的作用

每个语言都需要转换成字节码文件,最后转换的字节码文件能通过Java虚拟机进行运行和处理

简介

        Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成

        JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器,以及可靠的即时编译器

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

特点

        1.一次编译,到处运行

        2.自动内存管理

        3.自动垃圾回收机制

作用

        Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令。

位置

JVM是运行在操作系统之上的,它与硬件没有直接的交互

整体结构

JVM由类装载子系统、运行时数据区、java执行引擎三部分组成;三部分相辅相成共同工作,不能单纯的说只有执行完某一个部分才由下一个部分来工作,从JVM运行开始,三个类加载器就要开始创建,并且类加载器的一些信息也要放在运行时数据区

类装载子系统

        .class文件通过类装载系统进行加载,验证等一系列操作,在这个过程中将需要存储到内存的数据放到运行时数据区

运行时数据区

        java栈:线程独享;每个线程栈存放执行的方法,每个方法为一个栈帧

        本地方法栈:线程独享;类似于虚拟机栈,这里调用的是native的方法

        程序计数器:线程独享;存放每个线程中指令执行到哪一个

        方法区:线程独享;类信息,常量,静态变量等

        堆:线程独享;对象存放位置

java执行引擎

用于执行栈中指令,一条一条的指令读取,类似一个cpu,我们的虚拟机栈中操作数栈弹栈进行运算的运算就是由执行引擎进一步完成的
 

Java代码执行流程

1.Java代码通过编译器,转化生成为字节码文件

2.字节码文件在虚拟机上进行解析

3.操作系统执行

jvm架构模型

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

基于栈式架构

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

        2.避开了寄存器的分配难题,使用零地址指令方式分配

        3.指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。

        4.不需要硬件支持,可移植性更好,更好的实现跨平台

零地址指令:是机器指令的一种,是指令系统中的一种不设地址字段的指令,只有操作码,没有操作数。这种指令有两种情况:一是无需操作数,另一种是操作数为默认的(隐含的),默认为操作数在寄存器中,指令可直接访问寄存器。

机器指令:机器语言的语句称为机器指令。又将全部机器指令的集合称为机器的指令系统

基于寄存器架构

        1.指令集架构则完全依赖硬件,可移植性差

        2.性能优秀和执行力更高效

        3.花费更少的指令去完成一项操作

        4.在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主

总结

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

jvm的生命周期

分为:启动、执行、退出,三个阶段

1.启动

        通过引导类加载器创建一个初始类来完成,这个类是由虚拟机的具体实现指定的

2.执行

        一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序

        程序开始执行时他才运行,程序结束时他就停止

        执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程

3.退出

退出的情况:

       1.程序正常结束

       2.程序在执行过程中遇到了异常或者错误而终止

       3.操作系统出现错误而导致jvm进程终止

       4.某线程调用 Runtime 类或System 类 的exit 方法, 或 Runtime 类的 halt 方法,并且 Java 安全管理器也允许这次 exit 或 half 操作

       5.卸载虚拟机

JVM的发展历程

1.Sun Classic VM:世界上第一款商用Java虚拟机

2.Exact VM:具备现代高性能虚拟机的雏形

3.HotSpot VM:目前Hotspot占有绝对的市场地位,称霸武林

4.JRockit:专注于服务器端应用,是世界上最快的JVM

5.IBM的J9:市场定位与HotSpot接近,服务器端、桌面应用、嵌入式等多用途VM

6.CLDC Hotspot:简单、轻量、高度可移植,面向更低端的设备上还维持自己的一片市场

7.Azul VM:与特定硬件平台绑定、软硬件配合的专有虚拟机

8.Liquid VM:不需要操作系统的支持,或者说它自己本身实现了一个专用操作系统的必要功能,如线程调度、文件系统、网络支持等

9.Apache Harmony:IBM和Intel联合开发的开源JVM,受到同样开源的OpenJDK的压制,Sun坚决不让Harmony获得JCP认证,最终于2011年退役

10.Micorsoft JVM:只能在Windows平台下运行。但确是当时Windows下性能最好的Java VM

11.Taobao JVM:基于OpenJDK 开发了自己的定制版本AlibabaJDK,简称AJDK。是整个阿里Java体系的基石。国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机

12.Dalvik VM:只能称作虚拟机,而不能称作“Java虚拟机”,它没有遵循 Java虚拟机规范,不能直接执行Java的Class文件

13.Graal VM:在HotSpot VM基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言” 的运行平台使用

具体JVM的内存结构,其实取决于其实现,不同厂商的JVM,或者同一厂商发布的不同版本,都有可能存在一定差异。主要以Oracle HotSpot VM为默认虚拟机。

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

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

相关文章

竞赛选题 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

外卖小程序源码vs定制开发:何时选择哪种方式?

在数字餐饮行业的蓬勃发展中,外卖应用程序已经成为餐厅和创业者的必备工具。然而,当涉及到开发外卖应用程序时,您会面临一个重要的决策:是使用外卖小程序源码还是进行定制开发?这两种方法各有优势和劣势,取…

vue3+elementPlus el-input的type=“number“时去除右边的上下箭头

改成 代码如下 <script lang"ts" setup> import {ref} from vue const inputBtn ref() </script> <template><el-input type"number" v-model"inputBtn" style"width: 80px;" class"no_number">…

cartographer-(0)-ubuntu(20.04)-环境安装

1.安装 ROS wiki.ros.org 1.1修改镜像源&#xff1a; 到网站上找与操作系统相匹配的镜像源 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb htt…

Echarts 实现X轴多维效果

效果图 代码参考地址 https://download.csdn.net/download/Frazier1995/88403104

Android Studio 是如何和我们的手机共享剪贴板的

背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…

东哥录了一些课程,你能想到应该都有了

哈喽&#xff0c;大家好&#xff0c;我是hahaCoderX。 我在B站录制了《快速入门C语言程序设计》、《Python3网络爬虫开发实战》、《机器学习实战》以及我的个人图书案例讲解指南等系列课程&#xff0c;目前正在陆续上传开放中&#xff0c;欢迎大家看我的视频&#xff0c;一块学…

第十课 贪心

文章目录 第十课 贪心lc 322.零钱兑换--中等题目描述代码展示 lc860.柠檬水找零--简单题目描述代码展示 lc455.分发饼干--简单题目描述代码展示 lc122.买卖股票的最佳时机II--中等题目描述代码展示 lc45.跳跃游戏II--中等题目描述代码展示 lc1665.完成所有任务的最少初始能量--…

基于SSM的商品营销系统计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

ARM汇编学习录 1 -基础概念

指令集概述 现阶段有四个不同的指令集 名称概述ARM3232位指令集Thumb16位指令集,ARM32子集,提供高密度低功耗Thumb232位指令集,ARMv6T2 引入.是thumb超集ARM6464位指令集 note&#xff1a; ARM某一个时刻只能运行单独ARM指令集或者Thumb指令,通过CPSR的T标志位决定. 如何当前…

熔断、限流、降级 —— SpringCloud Alibaba Sentinel

Sentinel 简介 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…

AAU-net: 用于超声图像中乳腺病变分割的自适应注意力U-Net

AAU-net 期刊分析摘要贡献方法整体框架1.Hybrid Adaptive Attention Module2.Channel Self-Attention Block3.Spatial Self-Attention Block![在这里插入图片描述](https://img-blog.csdnimg.cn/629948402dc647d2b61817db3cd203f1.png) 实验1.消融实验1.1 Architecture Ablatio…

《protobuf》基础语法3

文章目录 默认值更新规则保留字段未知字段 默认值 在反序列化时&#xff0c;若被反序列化的二进制序列中不包含某个字段&#xff0c;则在反序列化时&#xff0c;就会设置对应默认值。不同的类型默认值不同&#xff1a; 类型默认值字符串“”布尔型false数值类型0枚举型0设置了…

基于风驱动优化的BP神经网络(分类应用) - 附代码

基于风驱动优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于风驱动优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.风驱动优化BP神经网络3.1 BP神经网络参数设置3.2 风驱动算法应用 4.测试结果&#x…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

Springboot学生成绩管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 学生成绩管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统 具有完整的源代码和数据库&…

Android:实现手机前后摄像头预览同开

效果展示 一.概述 本博文讲解如何实现手机前后两颗摄像头同时预览并显示 我之前博文《OpenGLES&#xff1a;GLSurfaceView实现Android Camera预览》对单颗摄像头预览做过详细讲解&#xff0c;而前后双摄实现原理其实也并不复杂&#xff0c;粗糙点说就是把单摄像头预览流程写两…

TikTok环保运动:短视频平台上的可持续发展

在当今社交媒体的繁荣时代&#xff0c;TikTok已经成为全球范围内年轻一代最喜爱的短视频分享平台之一。 数以亿计的用户在这里分享他们的创造力、生活片段和喜好。然而&#xff0c;随着全球环保意识的不断增强&#xff0c;TikTok也成为了一个独特的环境&#xff0c;倡导可持续…

Node-RED系列教程-25node-red获取天气

安装节点:node-red-contrib-weather 节点图标如下: 使用说明:node-red-contrib-weather (node) - Node-RED 流程图中填写经度和纬度即可。 演示: json内容: {

【重磅】这就是元宇宙碰撞的后果

筹备了一年多——朋友们&#xff0c;它终于来了&#xff01; 我们刚刚宣布官方 Aavegotchi x Sandbox 在 X 上共享元宇宙体验。 10 月 25 日在 The Sandbox 上线&#xff0c;有两份可领取的空投。 Gotchi 游戏即将爆发。你们兴奋吗&#xff1f;