类加载器,说白了就是加载类的呵呵
.类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象
.当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:
BootStrap----------JRE/lib.jar 根节点类加载器
ExtClassLoader-----------JRE/lib/ext/*.jar 扩展类加载器
AppClassLoader-----------CLASSPATH指定的所有jar或目录 应用类加载器也叫系统加载器
BootStrap classloader: 引导(也称原始)类加载器,他负责加载java的核心类(也就是JDK自带类)
这个加载器是非常特殊的,它实际上不是java.lang.ClassLoader的子类,而是由 JVM自身实 现的。可以通过执行一下代码来获得bootstrap classloader 加载了哪些
核心类库:
URL[]
urls
=
sun.misc.Launcher.
getBootstrapClassPath
().
getURLs
();
for
(
int
i
=
0;
i
<
urls.length
;
i
++) {
System.
out
.println
(
urls
[
i
].
toExternalForm
());
}
extension classloader: 扩展类加载器,它负责加载JRE的扩展目录中的jar包,这为引入除java核心类以外的新功能
提供了一个标准机制。因为默认的扩展目录对所有从同一个JRE中启动的JVM都是通用的所
以,放入这个目录的JAR类包对所有的JVM和system classloader都是可见的。。
(systemm)App classloader: 系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的
classpath或者java.class.path系统属性或者CLASSPATH操作系统属性所指定
的JAR类包和类路径
全盘负责委托机制:
全盘负责:当一个classloader加载一个class的时候,这个classs所依赖的和引用的其他class通常也由这个
classloader负责载入。
委托机制: 先让parent(父)类加载器寻找,只有在parent找不到的时候才从自己的类路径中寻找。
类加载器还采用了cache机制:
如果cache中保存了这个class就直接反悔它,如果没有才从文件中读取和转换成class,并存入cache,
这就是为什么修改class但是必须重新启动JVM才能生效,并且类指加载一次的原因
分享到:
相关推荐
* Platform class loader:平台类加载器可以看到所有平台类,平台类包括由平台类加载器或其祖先定义的JavaSE平台API,其实现类和JDK特定的运行时类。 * System class loader:它也被称为应用程序类加载器,与平台类...
静态变量在类加载时被初始化,存储在方法区,非静态变量在对象创建时分配在堆区。局部变量仅在方法内部有效,其生命周期随方法调用结束而结束。 垃圾回收机制(GC)是Java的一大特点,它自动回收不再使用的对象所...
1. 类加载器:JVM将类加载到内存的过程由类加载器完成。JavaSe7对类加载机制进行了一些优化,例如,对类的动态加载支持更好,允许在运行时发现和加载新的类,提高了程序的灵活性。 2. 类文件结构:JavaSe7中的类...
15.1.2 外部类之内创建内部类对象 322 15.1.3 外部类之外创建内部类对象 323 15.1.4 内部类与外部类之间的成员互访 324 15.1.5 内部类与外部类的预定义对象引用this 327 15.2 局部内部类 328 15.2.1 局部...
7. **MyClassLoader.java**:这可能是一个自定义类加载器的示例,类加载器是Java虚拟机的一部分,负责加载类到JVM中。通过这个示例,学习者可以了解如何编写自己的类加载器,以及如何动态加载和运行类。 8. **...
12. **JVM(Java虚拟机)**:了解JVM的工作原理,如类加载机制、内存模型(堆、栈、方法区等)和垃圾回收机制。 13. **调试和性能优化**:可能包含如何使用IDE进行调试,以及如何通过分析工具进行性能优化的知识。 ...
- **改进的内存管理**:垃圾收集器得到优化,提升了应用程序的性能,减少了内存泄露的可能性。 - **动态语言支持**:Java 6添加了JSR 223,允许在Java中更方便地嵌入和执行其他动态语言。 - **Java数据库连接...
Java的EventListener接口和相关事件类(如ActionEvent、KeyAdapter等)使得我们可以为组件添加事件监听器,处理玩家操作。 5. **数据结构与算法**:游戏中的地图、坦克位置、子弹轨迹等数据,通常需要合适的数据...
它对于动态加载类、创建对象、调用方法、访问私有成员等有重要作用,是Java强大的工具之一。 6. **常用类**(day20):这部分可能涉及Java标准库中的各种实用类,如集合框架、IO流、日期时间API等,这些都是日常...
- 类的加载涉及类加载器(ClassLoader),Java有三种内置的类加载器:bootstrap class loader、extension class loader和app class loader。它们按照层次加载不同位置的类。 4. **反射获取构造方法**: - 可以...
* 类的加载与 ClassLoader 的理解 * 创建运行时类的对象 * 获取运行时类的完整结构 * 调用运行时类的指定结构 * 反射的应用:动态代理 本资源摘要信息涵盖了 JavaSE 的多个方面的知识点,包括多线程编程、集合框架...
在环境变量配置方面,classpath用于指定类加载器搜索类的位置,JAVA_HOME指向JDK的安装目录,而Path则是Windows系统寻找可执行文件的目录。正确配置这些环境变量能够确保Java开发工具链和运行时能够找到所需资源。 ...
11. **JVM内部机制**:理解Java虚拟机的工作原理,如内存模型(堆、栈、方法区等)、垃圾收集机制和类加载器,有助于优化程序性能和排查问题。 通过这个名为"lesson1"的压缩包,你可以从基础开始,逐步学习和实践...
10. **JVM原理**:了解Java虚拟机的工作原理,如类加载机制、内存模型、垃圾收集,有助于优化代码性能,避免内存泄漏。 11. **NIO(New Input/Output)**:Java 1.4引入的NIO提供了一种非阻塞I/O模型,适用于高并发...
- `java`:Java解释器,启动JVM,加载运行时需要的类库,并执行`.class`文件。每个可执行的Java程序都必须有一个主入口点,即`main`方法。 在Java语法基础中,输入通常通过以下方式实现: 1. 标准输入:使用`System...
它们在类加载或对象创建时执行,用于初始化变量或执行特定逻辑。 - `day13_23(面向对象)代码块.avi`:这个视频可能讲解了不同类型的代码块及其作用,以及如何在实际编程中使用它们。 7. **包的概念**:包是组织...
- 安全性:Java有内置的安全机制,如类加载器,防止恶意代码攻击。 - 跨平台性:Java程序编译为平台无关的字节码,可在任何支持Java的平台上运行,得益于Java虚拟机(JVM)。 - **缺点**: - 语法复杂,初学者...
在Java中,可以使用`ImageIcon`类加载和显示这些资源。 通过这个项目,学习者不仅可以练习基本的Java语法,还能深入了解GUI编程、事件处理、多线程、数据结构和算法等核心概念。同时,游戏的调试和优化也是一个提升...
- **简单性**:Java语言的设计目标之一是易于学习和使用,语法清晰、简洁。 - **面向对象**:Java完全支持面向对象编程,包括封装、继承、多态等特性。 - **可移植性**:“Write once, run anywhere”(WORA)的原则...