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

java虚拟机执行加载文件


一、电脑培训分享Java类加载机制

1.加载类


每个开发人员肯定都知道这是otFoundExcetpion异常,它是关于Java技术体系中的类加载的。Java的类加载机制是技术体系的核心部分。虽然我与大多数开发人员没有太多直接接触,但要排查程序中的类加载错误等技术问题,了解其背后的机制可能会有所帮助。Java语言有很大的帮助。


那么什么是类加载?


类加载是指类中的二进制数据.class文件,类被读入内存,放置在运行时数据区的方法区中,然后在堆区中创建一个对象,将类封装在方法区中。数据结构。类加载器的最终产品是堆区域中的类对象。类对象封装了类在方法范围内的数据结构,并为Java程序员提供了访问方法范围内数据结构的接口。


类加载器是Java语言的一项创新,也是Java语言流行的重要原因之一。它允许在Java虚拟机中动态加载和执行Java类。类加载器从JDK1.0就已经存在,最初是为了满足JavaApplet的需求而设计的。JavaApplet需要从远程控制到浏览器下载并运行Java类文件。类加载器现在广泛应用于Web容器和OSGi中,并且类加载器不必等待类“第一次主动使用”才加载。JVM规范允许类加载器等待,直到需要使用某个类。如果.class文件丢失或者在预加载过程中出现错误,只有当程序第一次主动使用该类时,才允许类加载器报告该错误(LinkageError错误)。如果程序主动使用它们,类加载器将不会报告错误。


2.类的生命周期


类的加载过程包括验证、准备、分析和初始化五个阶段。需要注意的是,在这五个阶段中,加载、验证、准备和初始化这四个阶段的发生顺序是确定的,而在某些情况下,分析阶段不一定在初始化阶段之后开始,以支持Java语言的运行时绑定(也称为动态绑定或后期绑定)。另请注意,这里的不同阶段是按顺序启动的,而不是按顺序完成或完成的,因为这些阶段通常嵌套并混合在一起,并且通常在一个阶段的执行过程中调用或激活另一个阶段。


加载:查找并加载类的二进制数据


类加载操作在加载期间第一阶段,在加载阶段,虚拟机必须做以下三件事:


1通过类的完全定义获取类的定义合格的二进制名称字节流。(不指定从class文件获取,可以通过网络、动态生成、数据库等其他渠道获取)


2.改变这个词。节流所代表的静态内存结构在方法区被转换为运行时数据结构。


3.生成一个对象,该对象表示Java堆中的此类,作为方法区中数据的访问入口。


与类加载的其他阶段相比,加载阶段(具体是加载阶段获取类的二进制字节流的过程)是最可控的阶段是开发者可以使用系统提供的类加载器来完成加载过程,也可以自定义自己的类加载器来完成加载过程。



二、你知道Java代码是如何运行的吗?

揭开Java代码执行背后的神秘面纱:深入剖析整个类加载过程


Java程序的运行之旅是从一个看似简单的步骤开始的——类加载。这是Java虚拟机(JVM)将.class文件中的机器指令转换为可执行代码的关键环节,涵盖了类加载器、运行时数据区等几个核心组件。了解这个过程是每个Java开发人员提高编码效率和面试的必备知识点。


揭开Java类加载器的神秘面纱

Java虚拟机的类加载工作由多个特殊组件负责——类加载器(ClassLoader)。这包括三个不同的加载器:BootstrapClassLoader、ExtensionClassLoader和SystemClassLoader,每个加载器负责加载特定选择的类并确保通过独立命名空间进行隔离。


加载过程的五个阶段
加载阶段:类加载器读取.class文件并将其转换为类对象,同时确保文件格式正确并遵循Java规范。
验证阶段:检查类字节码的正确性和安全性,涉及文件格式、元数据、字节码和符号引用验证。
准备阶段:分配内存空间并将初始空值赋给类变量,但不执行任何代码。
解析阶段:将符号引用转换为直接引用,以便程序可以访问类的方法和字段。
初始化阶段:运行静态初始化(clinit)并初始化类的静态变量。任何异常都会导致该类变得不可用。
深入理解类加载的细节

类加载的每一步都充满了微妙的逻辑和策略。双亲委派模型使得BootstrapClassLoader在加载时优先考虑父加载器,除非找不到。类加载器的命名空间保证了类的唯一性。即使具有相同名称的类也可以存在于不同加载器的隔离区域中。


自定义类加载器允许开发人员根据需要进行扩展,从特定路径或网络检索字节码文件,甚至实现热部署,例如通过JRebel或DCEVM实用程序代码在运行时进行动态部署。


一般来说,Java类加载过程是一个动态且复杂的操作。它在幕后安静地工作,以确保Java程序的高效执行。掌握这个流程不仅可以帮助你编写更高效的代码,还可以让你在面试时展现出扎实的技术基础和深入的理解。