类的加载过程:
Java 类的加载器
Java 类的加载器是 Java 虚拟机(JVM)的一个重要组成部分,它负责将 Java 类文件加载到内存中,并将其转换为 Java 类对象。Java 类加载器主要有以下三种类型:
Bootstrap ClassLoader(引导类加载器):也称为根加载器,是 Java 虚拟机内置的类加载器,负责加载 Java 运行时环境所需的基础类,如 java.lang 包中的类。
Extension ClassLoader(扩展类加载器):负责加载 Java 运行时环境的扩展类,即位于 jre/lib/ext 目录下的类。
System ClassLoader(系统类加载器):也称为应用程序类加载器,负责加载应用程序类路径(Classpath)下的类。
此外,还有一种特殊的类加载器:用户自定义类加载器。这种类加载器是由开发人员自己实现的,可以用来加载一些特殊的类或者是自定义的类,例如动态加载类、热部署、插件化等。用户自定义类加载器需要继承自 java.lang.ClassLoader 类,并重写父类中的 findClass() 方法来实现类的加载。
Java 类加载器的作用是实现类的动态加载,这使得 Java 应用程序可以在运行时动态地加载一些类或者资源。通过类加载器,Java 应用程序可以实现一些特殊的功能,例如模块化编程、插件化架构、代码热替换等。同时,类加载器还能够保证类的安全性,避免因为恶意代码或者不良代码的加载而导致的安全漏洞。
java虚拟机是如何加载类
假设有一个类 MyClass,该类的源代码位于 MyClass.java 文件中。当 Java 应用程序运行时,它需要将该类加载到内存中,并创建该类的实例。
加载:Java 应用程序首先需要加载 MyClass 的二进制数据。Java 虚拟机根据类的全限定名 com.example.MyClass 来查找并加载该类的二进制数据,例如 com/example/MyClass.class 文件。
验证:Java 虚拟机会对 MyClass 类的字节码进行验证,以确保它符合 Java 虚拟机规范。
准备:在验证通过后,Java 虚拟机为 MyClass 类的静态变量分配内存,并设置默认值,例如将整型静态变量赋值为 0。
解析:Java 虚拟机将 MyClass 类的符号引用(例如类名)转换为直接引用(例如内存地址),以便于执行代码时访问类的方法和属性。
初始化:最后,Java 虚拟机执行 MyClass 类的静态初始化代码,例如赋初始值给静态变量。
在加载 MyClass 类的过程中,Java 类加载器起到了关键的作用。如果 MyClass 类位于应用程序类路径下,则由系统类加载器加载;如果该类位于扩展路径下,则由扩展类加载器加载;如果该类是 Java 运行时环境的基础类,则由引导类加载器加载。
总之,Java 应用程序的类加载过程是一个动态的过程,Java 类加载器负责将类加载到内存中,Java 虚拟机负责验证、准备、解析和初始化类,最终创建该类的实例。
什么是java虚拟机的规范
Java 虚拟机规范(Java Virtual Machine Specification)是一份由 Oracle 公司发布的文档,描述了 Java 虚拟机(JVM)的实现规范和行为规范,包括:
1 | JVM 的内部结构和运行机制。 |
同时,Java 虚拟机规范还为 JVM 的实现提供了一些指导性的建议,使得不同的 JVM 实现可以保证在一定程度上的互操作性,也便于开发者对 JVM 进行优化和调试。
Java 虚拟机规范是 Java 平台的核心技术之一,它不仅为 Java 语言的跨平台特性提供了支持,也为 Java 生态系统的发展