Java类加载机制?

3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。相对于类加载的其他阶段而言,加载阶段(准确地说,是加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,电脑培训发现因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来...
Java类加载机制?
1,类的加载

每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。

那么什么是类的加载?

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得Java类可以被动态加载到Java虚拟机中并执行。类加载器从JDK1.0就出现了,最初是为了满足JavaApplet的需要而开发出来的。JavaApplet需要从远程下载Java类文件到浏览器中并执行。现在类加载器在Web容器和OSGi中得到了广泛的使用,而类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。

2,类的生命周期

类加载的过程中包括有加载,验证,准备,解析,初始化五个阶段。而需要注意的是在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。

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

加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:

1、通过一个类的全限定名来获取其定义的二进制字节流。(并没有指明要从一个Class文件中获取,可以从其他渠道,譬如:网络、动态生成、数据库等)

2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。

3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。

相对于类加载的其他阶段而言,加载阶段(准确地说,是加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,电脑培训发现因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载。

2023-04-03
mengvlog 阅读 22 次 更新于 2025-08-09 00:06:01 我来答关注问题0
  •  翡希信息咨询 jvm-类加载机制

    JVM 类加载机制是 Java 虚拟机用于将类的字节码转换为运行时数据结构并初始化类变量和方法的过程。以下是 JVM 类加载机制的详细解释:一、类加载器 类加载器负责将类的字节码加载到 JVM 中,并将其转换为 java.lang.Class 对象。Java 类的生命周期包括加载、验证、准备、解析、初始化、使用和卸载七...

  •  翡希信息咨询 【JVM】深入理解双亲委派机制!

    双亲委派机制是Java类加载器加载类时采用的一种策略。它的主要目的是确保类的唯一性和安全性,防止恶意类替换或重复加载。类加载器层次结构:Java类加载器通常分为三种:启动类加载器、扩展类加载器和应用程序类加载器。启动类加载器:最顶级的类加载器,用C++实现,负责加载Java平台核心库中的类。扩展类...

  •  翡希信息咨询 JVM之类加载机制

    JVM的类加载机制是指将类的二进制字节流从各种来源(如本地文件系统、网络等)加载到JVM内存中,并经过一系列的处理,最终将其转换为一个可以被JVM执行的Java类的过程。这个过程包括加载、验证、准备、解析、初始化和卸载等几个阶段。1. 加载阶段 加载阶段主要是完成以下三件事情:通过一个类的全限定...

  •  翡希信息咨询 【JVM】深入理解双亲委派机制!

    自行加载:如果父加载器无法加载该类,则应用程序类加载器会尝试自行加载。抛出异常:如果所有尝试都失败,会抛出ClassNotFoundException异常。三、双亲委派机制的重要性 确保类型体系的统一性:通过双亲委派机制,确保了同一个类在Java虚拟机中只有一份,避免了类版本不一致的问题。提高程序的稳定性和安全性...

  • Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。那么什么是类的加载?类的加载指的是将类的.class文件中的二进制数据读入到内存...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部