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

java虚拟机启动过程解析


一、JVM之class加载过程

Java虚拟机是将描述类的数据从类文件加载到内存中,并对其进行验证/准备/解析和初始化,最终形成可直接在虚拟机中使用的Java类型的过程。它称为虚拟机。

称为虚拟机的类加载机制。

linking(verify->prepare->resolve)->resolve)->initialization

loading:使用双亲委托将类文件加载到内存中,主要是为了安全。

验证:验证类文件是否符合标准

准备:静态变量分配内存和设置初始值的步骤(不包括实例变量)

解决方案:将符号引用转换为直接引用

初始化:为静态变量赋初值

类加载过程大致分为三个部分:加载、连接、初始化。

类加载是指从类的.class文件中读取二进制数据到内存中,放置到运行时数据区的方法区中,然后在堆区中创建这个类。对象用于将类对象封装在方法范围内。主要步骤可以分为以下三步:

加载步骤完成后,将虚拟机外部的二进制字节流按照虚拟机要求的式存储到方法区中,并也可以通过相应的对象创建类的对象来访问方法区中的数据。

类加载的最终结果是位于堆区的Class对象。类对象将类的数据结构封装在其方法范围内,并为Java程序员提供访问方法范围内的数据结构的接口。有多种方法可以加载类。

JVM类加载是通过ClassLoader及其子类来完成的。类的层次关系和加载顺序如下:图:

rapClassLoader(启动类加载器)

连接可以分为三个小步骤:​​检查、准备、解析。

1.确认(目的):

2.确认:

确认是连接阶段的第一步。此步骤的目的是确定文件中包含的类信息。字节流满足当前虚拟机的要求,并且不会损害虚拟机本身的安全性。验证步骤大约完成四个验证步骤。

验证步骤非常重要,但不是必需的。如果引用的类被重复解析,则不会影响程序执行时间。为了加快虚拟机类加载时间,您可以考虑使用-Xverifynone参数关闭大多数类验证操作。

3.准备:

在准备阶段,静态变量的初始值是jvm默认的初始值,而不是程序中设置的初始值。jvm对于静态变量的默认值如下:

4.分析:

这一步的任务是将常量池中的符号引用转换为直接引用。什么是符号引用、直接引用?

1.它的作用:

JVM负责类变量(类变量是被修改为静态的变量)。这里,类变量(类变量就是修饰为static的变量)如下:主要是初始化。

2.初始化时机:

类初始化时机:类只有在被主动使用时才会被初始化。它包括以下6种类型:

3.初始化顺序:

子类静态方法/静态变量赋值

3.结论:

上面我们介绍的是类加载,包括加载、链接和初始化。
最近收集了很多Android进阶知识点,讲解的很详细。


二、java程序不能执行?Java程序的运行过程(执行过程)分析
1.编写:是指将程序代码输入到Java开发环境中,最终形成后缀为.java的Java源文件。
2.编译:指使用Java编译器对源文件进行故障排除的过程。编译后会生成一个带有.class后缀的字节码文件,不像C会创建一个可执行文件。
3.运行:指使用Java编译器将字节码文件翻译成机器码,执行并显示结果。
字节码文件是一种中间代码,与任何特定的硬件和操作系统环境无关。它是一个二进制文件,是Java源文件经Java编译器编译后创建的目标代码文件。字节码文件不能被程序员或计算机直接读取,必须由专用的Java编译器解释和执行,因此Java是一种基于汇编的解释和运行语言。
Java编译器负责将字节码文件翻译成特定硬件环境和操作系统下的机器代码来执行。因此,Java程序不能直接运行在现有的操作系​​统平台上,必须运行在一个称为Java虚拟机的软件平台上。
Java虚拟机(JVM)是​​运行Java程序的编程环境。Java编译器是Java虚拟机的一部分。Java程序运行时,首先启动JVM,然后它负责解释并执行Java字节码程序,Java字节码程序只能在JVM上运行。这样,JVM就可以用来将Java字节码与特定的硬件平台和操作系统环境解耦。只要将针对特定平台的JVM安装在不同的计算机上,Java程序就可以运行,而无需考虑当前选择的硬件平台和操作系统环境,也无需考虑字节码文件生成的平台。
JVM隐藏了不同软硬件平台之间的具体差异,从而在二进制代码层面实现了真正的跨平台移植。JVM是Java平台架构的基础。Java的跨平台特性是通过在JVM中运行Java程序来实现的。Java的运行机制可以用下图来说明。
Java语言的“一次编写,随处运行”的方式有效解决了大多数现有高级编程语言需要编译为不同系统产生不同机器码的问题,即硬件环境和环境的差异。操作平台解决了问题的结构化并显着降低了软件开发、维护和管理的成本。
提示:Java程序可以通过JVM实现跨平台的功能,但是JVM是不跨平台的。也就是说,不同操作系统上的JVM与其他Windows操作系统不同,不能在Linux系统上使用,反之亦然。
三、java工作原理Java是如何工作的
它由四个方面组成:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序编程接口
编辑和运行Java程序时,必须同时涉及这四个方面。使用文本编辑软件(如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义各种类,并通过调用类中的方法来访问它们(这些类实现了JavaAPI)。)资源系统对源文件进行编译,产生二进制中间代码,保存在class文件中,然后运行class文件,启动与操作系统平台环境对应的Java虚拟机,执行编译生成的字节码。并给班级打电话。文件中实现的方法满足程序的JavaAPI调用。