当前位置:首页 > 虚拟机 > 正文

jvm虚拟机结构


一、简述jvm工作原理Java是一种由四个方面组成的技术:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序编程接口(JavaAPI)。
运行时环境代表Java平台,开发人员编写Java代码(.java文件),然后将其编译成字节代码(类文件),然后将字节代码加载到虚拟机内存中。,它会被解释器解释并执行,或者由实时代码生成器选择性地转换为机器代码来执行。
Java平台是由Java虚拟机构建的,Java应用程序编程接口是进入该平台的管道,用Java语言编写和编译的程序可以在该平台上运行。
在Java平台的结构中,可以看出Java虚拟机(JVM)是​​核心,是程序独立于操作系统和底层硬件的关键。下面是移植接口,它由适配器和Java操作系统两部分组成,其中与平台相关的部分称为适配器;JVM是Java基本类库及其扩展类库和API以及使用JavaAPI编写的Java小程序可以运行在任何Java平台上而不管基础平台如何,因为Java虚拟机(JVM)与程序分离。实现了操作系统,从而实现了Java平台无关性。
JVM在其生命周期中有一个明确的务,那就是运行的Java程序实例也会丢失。接下来我们将从JVM的架构和运行流程两个方面对JVM进行更深入的研究。
虚拟机架构
·每个JVM都有两种机制:
①类加载子系统:加载有相应的类或接口
②执行引擎:负责用于执行加载的类或接口中包含的指令
·每个JVM包含:
方法区、Java堆栈、Java堆栈、本地方法堆栈、指令计数器和其他隐式寄存器
2Java代码编译和执行的全过程
前面说过,Java编译和执行的全过程。代码是这样的:开发者编写Java代码(.java文件),然后将其编译成字节码(class文件),然后安装字节码。一旦字节码进入虚拟机,就会被一个虚拟机解释执行。口译员。或者由实时代码生成器选择性地转换为机器代码来执行。
(1)Java代码的编译是由Java源代码编译器完成的,即将Java代码转换为JVM字节码(类文件)的过程。
2)Java字节码的执行是由JVM执行引擎完成
Java代码编译执行的整个过程包括以下三个重要机制:

·Java源代码编译机制
·类加载机制
·类执行机制
(1)编译机制Java源代码
Java源代码的编译由以下三个过程组成:
①分析并输入符号表
②注解处理
③语义分析和类文件生成
最终生成的类文件由以下几部分组成:
①结构信息:包括class文件的格式版本号以及各部分的数量和大小信息
②元数据:Java源代码中的声明和常量对应的信息。包含声明信息、域声明信息以及持久类/继承的超类/实现的接口的方法和组
③方法信息:对应于Java源代码中的语句和表达式对应的信息。包含字节码、异常处理表、求值堆栈和局部变量区大小、求值堆栈类型记录、调试符号信息
(2)类加载机制JVM类加载是通过ClassLoader及其子类来完成的
二、详解JVM内存结构组成

你知道JVM内存结构吗我来分享一下JVM内存结构。它主要包括两个子系统和两个组件。这两个组件分别是组件Runtimedataarea(运行时数据区)和Nativeinterface。组件

JVM内存结构

最近看了一些Java内存泄漏的案例,并和一些原来的朋友进行了讨论。经过深入研究,我发现JVM中还有很多以前不知道的细节。以下是一些细节。要分析的话,首先看一下JVM的内部结构——

如,JVM内存结构主要包括两个子系统和两个组件。这两个子系统是Classloader子系统,而Executionengine子系统的两个组件是Runtimedataarea(运行时数据区)组件和Nativeinterface。(本地接口)组件

Classloader子系统的作用

将类文件的内容加载到RuntimeDataarea的方法区(methodarea)中基于给定的完全限定类名(如javalangObject)Java程序员可以扩展javalangClassLoader类来编写自己的Classloader

Executionengine子系统的作用

与原生库的交互是其他编程语言进行交互的接口当你调用native方法时,你就进入了一个新的世界,不再受JVM无法控制的虚拟机的限制

RuntimeDataArea组件

这就是我们常说的JVM内存,主要分为五个部分——

Heap(堆)Java虚拟实例中只有一个堆空间

MethodArea(方法区)加载的类的信息保存在内存中到Methodarea中,当虚拟机加载某种类型的用户类时,加载器找到对应的类文件,然后读取类文件的内容,传输给虚拟机

虚拟JavaStack(java栈)虚拟机只会以帧为单位直接在Javastack上执行两个操作。压入或弹出堆栈

ProgramCounter(程序计数器)每个线程都有自己的PC寄存器。线程启动时创建的PC寄存器的内容始终指向下一条要执行的指令。地址这里的地址可以是本地指针,也可以是方法区中方法的起始指令对应的偏移量

Nativemethodstack(本地方法栈)存放的是进入该区域的native方法的地址

力西新纸/Article/program/Java/hx/201311/26038


三、JAVA虚拟机是什么意思?Java虚拟机(JavaVirtualMachine,简称JVM)是​​一台想象中的计算机。从结构上看,它由六个部分组成:抽象指令集、寄存器组、类文件格式规范、堆栈、内存垃圾收集器和存储区域。指令集采用独立于平台集成的字节码形式。寄存器组包含程序计数器、堆栈指针、执行环境指针和变量指针。类文件也是平台无关的并返回操作结果。垃圾收集器收集不再使用的内存段,该存储区域用于存储字节码。JVM只规定了组件的功能和规格。虽然这些功能和规范是统一的,但没有规定这些组件的具体实现技术,即可以采用任何技术来实现。
Java引入了虚拟机的概念,在机器和编译器之间添加了一个抽象的虚拟机层。该虚拟机为任何平台上的编译器提供了通用接口。编译器只需要面向虚拟机,生成虚拟机可以理解的代码,然后解释器将虚拟机代码转换为特定系统的机器代码来执行。在Java中,这种虚拟机可以理解的代码称为字节码(ByteCode)。它不面向任何特定处理器,而仅面向虚拟机。
各个平台的解释器不同,但实现的虚拟机是一样的。Java源程序经过编译器编译后成为字节码。字节码由虚拟机解释并执行。虚拟机将每个要执行的字节码发送给解释器,解释器将其翻译为特定机器上的机器。代码,然后在特定机器上运行它。
可以说,Java虚拟机是Java语言的基础。它是Java技术的重要组成部分。Java虚拟机是一种抽象计算机,它像真实计算机一样具有指令集并使用不同的存储区域。它负责执行指令并管理数据、内存和寄存器。Java解释器负责将字节码翻译成特定机器的机器码。Java是一种简单的语言。它使用很少的概念,并且大多数程序员都熟悉。如果您是一名程序员,掌握Java对您来说很容易。即使你没有学过任何编程语言,学习Java也比学习C++容易得多。