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.hqwc.cn/news/128062.html

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

相关文章

【微服务】RedisSearch 使用详解

目录 一、RedisJson介绍 1.1 RedisJson是什么 1.2 RedisJson特点 1.3 RedisJson使用场景 1.3.1 数据结构化存储 1.3.2 实时数据分析 1.3.3 事件存储和分析 1.3.4 文档存储和检索 二、当前使用中的问题 2.1 刚性数据库模式限制了敏捷性 2.2 基于磁盘的文档存储导致瓶…

数字三角形加强版题解(组合计数+快速幂+逆元)

Description 一个无限行的数字三角形,第 i 行有 i 个数。第一行的第一个数是 1 ,其他的数满足如下关系:如果用 F[i][j] 表示第 i 行的第 j 个数,那么 F[i][j]A∗F[i−1][j]B∗F[i−1][j−1] (不合法的下标的数为 0 &a…

Springboot项目log4j与logback的Jar包冲突问题

异常信息关键词: SLF4J: Class path contains multiple SLF4J bindings. ERROR in ch.qos.logback.core.joran.spi.Interpreter24:14 - no applicable action for [properties], current ElementPath is [[configuration][properties]] 详细异常信息&#xff1a…

水波纹文字效果动画

效果展示 CSS 知识点 text-shadow 属性绘制立体文字clip-path 属性来绘制水波纹 工具网站 CSS clip-path maker 效果编辑器 页面整体结构实现 使用多个 H2 标签来实现水波纹的效果实现&#xff0c;然后使用clip-path结合动画属性一起来进行波浪的起伏动画实现。 <div …

盒子模型的基础

盒子模型 边框&#xff08;border&#xff09; border可以设置元素的边框&#xff0c;边框分成三部分&#xff0c;边框的&#xff08;粗细&#xff09;边框的样式&#xff0c;边框的颜色 <style>div {width: 100px;height: 100px;border-width: 200;border-style: 边框…

应用层协议——DNS、DHCP、HTTP、FTP

目录 1、DNS 协议 1-1&#xff09;Hosts 文件 1-2&#xff09;DNS 系统 1-3&#xff09;域名的组成、分类和树状结构 1-4&#xff09;DNS 域名服务器类型 1-5&#xff09;DNS 查询方式 1-6&#xff09;DNS 域名解析的一般步骤 1-7&#xff09;对象类型与资源记录 2、D…

ELK整合springboot(第二课)

一、创建一个springboot的项目 pom文件如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLo…

深入解析 const 关键字:指针、参数、返回值和类成员函数

文章目录 const 关键字的理解一、 修饰普通类型的变量二、const 修饰指针变量三、const 作参数传递 和 函数返回值&#xff08;1&#xff09;const 修饰函数参数&#xff08;2&#xff09;const 修饰函数返回值 四、const修饰类成员函数结尾 const 关键字的理解 const 在 C 中…

基于SVM+TensorFlow+Django的酒店评论打分智能推荐系统——机器学习算法应用(含python工程源码)+数据集+模型(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境方法一方法二 安装其他模块安装MySQL 数据库 模块实现1. 数据预处理1&#xff09;数据整合2&#xff09;文本清洗3&#xff09;文本分词 相关其它博客工程源代码下载其它资料下载 前言 本项目以支…

好物周刊#19:开源指北

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Vditor 一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得、…

三十一、【进阶】B+树的演变过程

1、B树简单介绍 &#xff08;1&#xff09;介绍&#xff1a;B树也属于B树&#xff0c;是B树的变种 &#xff08;2&#xff09;特点&#xff1a;所有的数据都位于叶子节点上&#xff0c;叶子节点上的所有元素形成了一个单项链表 &#xff08;3&#xff09;图示&#xff1a; 2…

Spring源码解析——IOC属性填充

正文 doCreateBean() 主要用于完成 bean 的创建和初始化工作&#xff0c;我们可以将其分为四个过程&#xff1a; 最全面的Java面试网站 createBeanInstance() 实例化 beanpopulateBean() 属性填充循环依赖的处理initializeBean() 初始化 bean 第一个过程实例化 bean在前面一篇…