java ClassLoader的学习
java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执行,.class字节码文件本身是平台无关的,但是jvm却不是,为了实现所谓的一次编译,到处执行,sun提供了各个平台的JVM实现--也就是说jvm不是跨平台的,编译好的字节码文件被放在不同的操作系统平台上的jvm所解释执行,这个章节主要解释一下JVM装载类的机制
1.ClassLoader是个毛东东?
一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassLoader,这个类主要就是用来把指定名称(指定路径下)的类加载到JVM中
2.ClassLoader的分类
主要分4类,见下图橙色部分
JVM类加载器:这个模式会加载JAVA_HOME/lib下的jar包
扩展类加载器:会加载JAVA_HOME/lib/ext下的jar包
系统类加载器:这个会去加载指定了classpath参数指定的jar文件
用户自定义类加载器:sun提供的ClassLoader是可以被继承的,允许用户自己实现类加载器
类加载器的加载顺序如图所示:
3.类加载顺序
JVM并不是把所有的类一次性全部加载到JVM中的,也不是每次用到一个类的时候都去查找,对于JVM级别的类加载器在启动时就会把默认的JAVA_HOME/lib里的class文件加载到JVM中,因为这些是系统常用的类,对于其他的第三方类,则采用用到时就去找,找到了就缓存起来的,下次再用到这个类的时候就可以直接用缓存起来的类对象了,ClassLoader之间也是有父子关系的,没个ClassLoader都有一个父ClassLoader,在加载类时ClassLoader与其父ClassLoader的查找顺序如下图所示
分享到:
相关推荐
类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对类加载器原理的详细解释: 1. 类加载器作用: 当JVM启动时,如果需要使用某个类,对应的类加载器会将这个类...
当JVM启动时,会根据`-classpath`命令行参数或`java.class.path`系统属性指定的路径加载类。此外,还可以通过环境变量`CLASSPATH`来指定类路径。 系统类加载器是用户应用程序中最常用的类加载器,它是`ClassLoader`...
总结来说,Java应用程序类加载器是Java程序执行的关键部分,它负责在运行时找到并加载类,而它的灵活性和可配置性为开发者提供了强大的能力来适应各种复杂的应用场景。理解并掌握类加载器的工作原理,能帮助我们更好...
Java类加载器是Java虚拟机(JVM)...总之,Java类加载器是Java程序运行的基础,它们决定了类的加载方式和顺序,对系统的稳定性和安全性起着关键作用。理解类加载器的工作机制对于进行JVM优化和解决类冲突问题至关重要。
如上述示例中的`java -Xbootclasspath/a:myjar.jar MainClass`,如果`MainClass`位于`myjar.jar`中,那么即使系统类加载器通常会加载第一个应用类,但由于`-Xbootclasspath/a`参数的存在,`MainClass`会被引导类加载...
在类加载器加载类时,它会对类中的静态变量进行初始化。这个过程是通过 Java 语言规范中定义的初始化顺序来完成的。 在 Java 语言规范中,静态变量的初始化顺序是按照以下顺序进行的: 1. 首先,静态变量的声明...
系统类加载器在加载类时,会先尝试让扩展类加载器加载,如果扩展类加载器无法加载,则再由系统类加载器自己尝试加载。这样的设计是为了保证核心类库的唯一性和安全性,避免用户自定义的类覆盖了 JDK 内置的核心类。 ...
类加载器遵循双亲委派模型,这意味着当一个类加载器尝试加载类时,它首先会将请求委托给其父类加载器,直到到达顶层的Bootstrap ClassLoader,如果父类加载器无法找到该类,子类加载器才会尝试自己加载。 在Tomcat...
这对于应用程序服务器和插件系统尤其有用,因为它允许组件使用自己的类加载器加载类,而不是依赖全局的类加载器。 总结起来,Java类加载机制的双亲模型保证了系统的稳定性,而自定义类加载器则提供了灵活性,允许...
当一个类加载器收到加载类的请求时,它首先会将任务委托给父加载器,只有当父加载器无法加载时,子加载器才会尝试自己去加载。这一机制保证了Java核心库的稳定性,避免用户自定义类覆盖系统类。 在实际应用中,我们...
类加载机制涉及类加载顺序、类加载器的体系结构、类加载过程以及双亲委派模型等核心概念。架构师或高级开发人员必须深刻理解这些知识点,以便在进行大型互联网平台架构设计和开发时做出正确的决策。 首先,类加载指...
类加载器在类加载机制中扮演关键角色,它们负责加载类的二进制字节流。Java有三种标准类加载器:Bootstrap ClassLoader(引导类加载器),负责加载JRE核心类;Extension ClassLoader(扩展类加载器),加载JRE扩展...
类加载器会将类的字节码文件(.class)加载到Java虚拟机(JVM)中,然后 JVM 会对其进行解析和初始化。 类加载的过程可以分为以下几个步骤: 1. 加载(Loading):在这个阶段,类加载器会将类的字节码文件加载到...
1. **PARENT_FIRST**:这种模式下,父类加载器会先于子类加载器加载类。这种方式有利于保持应用程序的一致性,但是可能导致新版本的类无法被正确加载。 2. **PARENT_LAST**:这种模式下,子类加载器会先尝试加载类...
1. **加载范围**:启动类加载器加载的类库通常包括`rt.jar`等核心类库,这些类库对Java虚拟机至关重要。 2. **加载方式**:启动类加载器是通过C++语言实现的,而非Java语言。 3. **委托机制**:用户自定义类加载器若...
在Java编程语言中,类加载器(ClassLoader)是运行时环境的重要组成部分,它负责将类的字节码从各种来源(如硬盘、网络或内存)加载到Java虚拟机(JVM)中,使得程序能够执行。类加载工具则是辅助开发者理解和分析类...
加载过程通常由类加载器完成,它会找到类的字节码文件(.class文件),并将其转换为内存中的类结构。 2. **验证(Verification)**:加载后的类需要经过验证,以确保其符合Java语言规范,不会对JVM造成破坏。验证...