Java虚拟机简介

Java虚拟机简介JVM概念● JVM是JavaVirtualMachine(Java虚拟机)的缩写,是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码)

大家好,又见面了,我是你们的朋友全栈君。

JVM概念

● JVM 是 Java Virtual Machine(Java虚拟机)的缩写,是 JRE 的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java 虚拟机 JVM 是属于 JRE 的,而现在我们安装 JDK 时也附带安装了 JRE (当然也可以单独安装JRE)。

● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

● Java虚拟机实例负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例就诞生了。当程序结束,这个虚拟机实例也就消亡。在 Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数据类型和指令来描述的,这些组成部分一起展示了抽象的虚拟机的内部体系结构。

● 作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对载入编译文件格式要求,任何语言都可以由JVM编译运行。

● Java虚拟机与Java语言并没有必然的联系,他只与特定的二进制文件格式—Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码,Bytecodes)和符号表,还有一些其他辅助信息。

● JVM被分为三个主要的子系统:类加载器子系统、运行时数据区和执行引擎 。
在这里插入图片描述

● Java虚拟机的主要任务是装载class文件并且执行其中的字节码。由下图可以看出,Java虚拟机包含:类装载器(class loader)可以从程序和API中装载class文件Java API中只有程序执行时需要的类才会被装载字节码由执行引擎来执行
在这里插入图片描述

1、跨平台性

Java 语言最重要的特点就是跨平台运行,使用 JVM 就是为了支持与操作系统无关,实现跨平台。JVM至关重要,正是因为它有针对不同平台的虚拟机,其向上屏蔽了操作系统的差异,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

(1)针对不同平台的虚拟机在这里插入图片描述
(2)屏蔽操作系统的差异
在这里插入图片描述

2、JVM体系结构

JVM的内部体系结构可以大致分为三部分,分别是:类装载器(ClassLoader)子系统、运行时数据区和执行引擎。
在这里插入图片描述
(1)类装载器

每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。

(2)运行时数据区

运行时数据区主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈。
在这里插入图片描述

● 方法区和堆由所有线程共享

①堆:存放所有程序在运行时创建的对象
②方法区:当JVM的类装载器加载.class文件并进行解析,把解析的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据放入方法区。

● Java栈、PC寄存器和本地方法栈由线程独享

①JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。
②PC寄存器:可以看成是当前线程所执行的字节码的行号指示器
③本地方法栈:存储本地方法调用的状态

(3)执行引擎(它或者在执行字节码,或者执行本地方法)

每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。主要的执行技术有:解释即时编译自适应优化芯片级直接执行。其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式。

自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行。

3、JVM数据类型

Java虚拟机通过某些数据类型来执行计算。数据类型可以分为两种:基本类型和引用类型。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157071.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • go 环境搭建(mac 版)

    go 环境搭建(mac 版)1.下载合适你电脑的版本,下载地址是:https://studygolang.com/dl,我是macm1的,我下载的是https://studygolang.com/dl/golang/go1.17.2.darwin-arm64.pkg如下图:2.下载完成后,双击安装,安装成功后如下图:3.打开终端,输入goversion如果出现版本成功,就是安装成功了,如下图:如果输入命令,说找不到commandnotfound:go的情况解决如下:…

    2022年10月12日
  • 运维标准化工作流程

    运维标准化工作流程运维标准化工作流程:http://wenku.baidu.com/link?url=bt1ZVijjS35mSSMoDbs4rgWtrG0zBY8a-zuIKPfi5TGehD6XHD8RzscniHsOtODaKkqCG7ba5DeUHLS6sqes03JdEdOYEK1OPviwsl9wv0_ 转载于:https://blog.51cto.com/jackysz…

  • 偷窃转基因玉米种子引发中美打农业官司

    偷窃转基因玉米种子引发中美打农业官司

    2021年11月28日
  • 小米网关一二三代的区别【转载】网关,mesh ,zigbee「建议收藏」

    小米网关一二三代的区别【转载】网关,mesh ,zigbee「建议收藏」小米智能家居北京小米科技有限责任公司索要资料  一般一个网关覆盖150平米的房子没什么问题,但是如果设备离网关太远,同时又隔了两三堵墙,中间又没有其它设备,那就会有点问题(zigbee设备每个设备之间是可以桥接信号的,它会自动选取信号最好的路径)。所以,一般一个房子一个网关就够了。如果是大房子,网关最好放房子中间位置,先买一个网关,如果信号不够,再买多一个。下面我们就来简单的介绍一下小米网关一二三代的区别!小米网关一二三代的区别  小米多功能网关一代二代和三代有什么区别?最直观的区别在于小米多功能

  • 汉诺塔问题java代码_汉诺塔java实现结果

    汉诺塔问题java代码_汉诺塔java实现结果Java基础语法(汉罗塔)1起源2需求3分析3.11个碟子3.22个碟子3.33个碟子3.44个碟子3.5规律4代码实现:直接算法5代码实现封装:栈的思想1起源汉罗塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。2需求将汉罗塔问题抽象到数学:

    2022年10月11日
  • 腾讯课堂视频下载_电脑腾讯会议不支持虚拟背景

    腾讯课堂视频下载_电脑腾讯会议不支持虚拟背景如果想把腾讯课堂里的视频下载到本地,这里提供一个方法。原理就是通过提取网页中的视频链接,进行下载。提取网页中的视频链接方法有很多。这里介绍通过浏览器插件的方式。1.我是在firefox附加组件里搜索“视频下载”找到的一款插件。flashvideodownloader,安装即可2.打开腾讯课堂网页版,播放想要下载的视频。浏览器会缓存你播放的视频,一般是5分钟一个。3.打开浏览器插件,它就会显示…

    2022年10月22日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号