类加载器
1. 引导类加载器
负责加载系统的内核文件,如 java.lang、java.util包等
搜录路径为: JAVA_HOME/jre/lib 及 JAVA_HOME/lib
2. 扩展类加载器
负责加载JDK的扩展包,搜寻路径为:JAVA_HOME/jre/lib/ext
3. 系统类加载器
负责加载用户的自定义类型;
4. 自定义类加载器
根据业务规则来加载
各种类加载器的关系:
引导类加载器
|
扩展类加载器
|
系统类加载器
|
自定义类加载器
相关API:
java.lang.Class
getClassLoader() --> ClassLoader
java.lang.ClassLoader
getParent() --> ClassLoader
loadClass(String name, boolean resolve)
findLoadClass(String name);
findClass(String);
defineClass(String name, byte[] buf, int off, int len);
类加载的原理:
1.所有类的加载都会递归地调用父类的类加载器来加载类, 采用的是一种代理的方式
如下:
比如, JVM现在在加载 org.example.Student 这个类, 则首选会加载 Object类, 因为任何类都继承于 java.lang.Object
而Student的类加载器,在默认情况下为sun.misc.Lanucher$AppClassLoader, 依据代理方式 ,它会先去代理给父类的加载器【扩展,再到引导】
由父类加载器尝试去加载 Object, Student, 当然, 引导类加载器可以加载到 Object类,但加载不到 Student, 所以,最终, Student会被 应用类加载器所加载;
2. 类加载器 ClassLoader 加载类时,调用方法的顺序为:
首先根据完整的全限定名 去调用 loadClass 方法 【此方法实现了 代理的方式,会依次代理给父类加载器】
在loadClass方法内会调用 findLoadClass, 来查找此类之前是否已加载过, 如果有,则返回,如果没有,则调用
findClass 方法去查找, 【ClassLoader默认情况下会依据 classpath环境变量来查找】
最后调用 defineClass 把字节码转换成 java.lang.Class的一个实例;
分享到:
相关推荐
Java中的类是动态加载的,只有在运行期间使用到该类的时候,才会将该类加载到内存中,Java依赖于运行期动态加载和动态链接来实现类的动态使用。 一个类的整个生命周期如下: 加载,验证,准备,初始化和...
Java反射技术浅谈 Java作为一种广泛使用的编程语言,它的设计目标之一是提供一种灵活的编程方式,使程序能够在运行时识别和操作对象。为了实现这一目标,Java语言引入了反射机制,使得开发者能够动态地探索和操作...
Java反射技术浅谈 Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。...
Java JVM 调优浅谈 Java 虚拟机(JVM)是 Java 语言的核心组件之一,负责加载、验证、执行 Java 字节码。JVM 的调优对于 Java 程序的性能和稳定性至关重要。下面对 JVM 调优的相关知识点进行了详细的解释。 数据...
"浅谈JAVA虚拟机JVM及工作原理" Java虚拟机(JVM)是Java语言的 runtime 环境,它提供了一个平台独立的环境,使得Java程序可以跨平台运行。JVM 的主要组件包括虚拟机栈、堆、方法区、程序计数器、本地方法栈等。 1...
连接MySQL数据库的步骤包括引入必要的java.sql包、加载JDBC驱动程序、创建数据库连接(Connection),以及创建数据库连接后进行操作。在Java代码中,这一过程大致如下: 1. 导入java.sql包; ```java import java....
当Java程序启动时,JVM会加载类文件,解析字节码,并在必要时将其编译为更高效的本地代码(JIT编译)。此外,JVM还提供了一种安全机制,确保字节码不包含恶意或错误的代码。 理解JVM的工作原理对于Java开发者至关...
网上有许多关于类加载的帖子,许多都有不严谨、错误,如果你想正确地,更深入地学习,有必要去oracle的官网看Java虚拟机规范。 路径有点深,跟着下面的图片左上角去找 ———-进入正题———- 这里我们准备一个...
在本资料"浅谈为什么java命令运行class文件出现异常共7页.pdf"中,可能详细讨论了这些常见问题及其解决方法。由于提供的压缩包中仅有一个名为"赚钱项目"的文件,这似乎与Java编程无关,因此可能不是解决上述问题的...
1. 加载数据库驱动程序。 2. 使用JDBC建立数据库连接。 3. 执行SQL语句并访问数据库。 4. 断开数据库连接。 然而,这种模式存在以下问题: - 每次请求都需要新建连接,耗时且消耗系统资源。 - 连接未正确关闭可能...
"浅谈 JVM 原理" JVM(Java Virtual Machine)是一种虚拟机,它可以模拟完整的硬件系统功能,运行在一个完全隔离的环境中,提供了一个完整的计算机系统。JVM 可以分为三类:VMWare、Visual Box 和 JVM。其中,...
Java 类的加载过程是程序运行中的重要环节,它涉及到类的生命周期和内存管理。本文将深入探讨Java类中各成分的加载顺序以及它们在内存中的存放位置。 首先,类的加载通常发生在以下三种情况: 1. 创建对象:通过`...
3. **避免重复初始化变量**:Java会默认初始化变量,但对于继承的类,构造函数链会被自动调用,可能导致不必要的重复初始化。合理设计类的构造函数,减少不必要的资源浪费。 4. **使用final修饰符**:final修饰的类...
这使得Java具备了强大的元数据操作能力,可以实现动态加载类、创建对象、调用方法等功能。 首先,每个Java类在运行时都有一个对应的`Class`对象,这个对象包含了类的所有元数据。例如,当我们声明一个对象并实例化...
Java中的类加载机制是指Java虚拟机(JVM)在加载类文件时的相关处理过程。当多个Jar包中包含相同的包名和类名时,可能会出现类加载问题。下面我们来讨论这种情况下的类加载问题。 类加载机制 Java中的类加载机制是...
另外,JAVA7.0版本以后的升级类加载classloader架构提升了独立性和运行速度,以及支持使用catch语句进行智能选择,都使得JAVA语言在众多编程语言中脱颖而出,成为计算机软件开发的重要工具。 在计算机软件开发的...
在安全性方面,Java设计有严谨的安全模型,包括类加载器机制、访问权限控制和安全管理器,以防止恶意代码的执行。Java还支持数字签名和加密技术,增强了软件的安全性。 总的来说,Java编程语言以其强大的功能、跨...
在Java世界中,虚拟机(JVM)...总的来说,了解JVM的运行时数据区和类加载机制对于优化Java应用程序性能、解决类冲突和理解类加载过程至关重要。通过深入学习这些概念,开发者可以更好地理解和控制Java程序的运行行为。