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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue 路由嵌套_vue路由实现方式

    vue 路由嵌套_vue路由实现方式嵌套路由有时候在路由中,主要的部分是相同的,但是下面可能是不同的。比如访问首页,里面有新闻类的/home/news,还有信息类的/home/message。这时候就需要使用到嵌套路由。项目结构如下:

    2022年7月31日
    5
  • 智能家居趋势[通俗易懂]

    智能家居趋势[通俗易懂]光纤到户,宽带提速,提升3G网络的覆盖面和服务质量,推动年内发放4G牌照,全面推进三网融合,年内在试点基础上向全国推广……种种政策告诉我们,互联网将会覆盖全球,上传、下载速度将会大幅度提高,信息时代的到来已是大势所趋。作为对于互联网依赖程度比较深的智能家居,在这样一场浪潮中,将会成为最大的受益者之一,尤其,在目前的经济形势以及技术发展形势中,智能家居代表的已经是新一轮信息技术革命中,价值最大的产业…

    2022年6月22日
    34
  • python fileinput_Python中fileinput模块

    python fileinput_Python中fileinput模块fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于:前者是一个迭代对象,即每次只生成一行,需要用for循环迭代。后者是一次性读取所有行。在碰到大文件的读取时,前者无疑效率更高效。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。【典型用法】importfileinputf…

    2022年6月6日
    31
  • PHP defined() 函数

    PHP defined() 函数

    2021年10月9日
    50
  • robot framework-创建测试用例「建议收藏」

    robot framework-创建测试用例

    2022年4月2日
    39
  • eval在python中是什么意思_如何在Python中使用eval ?

    eval在python中是什么意思_如何在Python中使用eval ?Python中的eval是什么?在Python中,我们有许多内置方法,这些方法对于使Python成为所有人的便捷语言至关重要,而eval是其中一种。eval函数的语法如下:eval(expression,globals,locals)如上所示,eval函数采用三个参数:expression–需要一个字符串,该字符串将被解析并评估为Python表达式globals(可选)–一个字典,用于指定…

    2025年6月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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