深入分析Java ClassLoader原理(转载)

简介: 转自:http://blog.csdn.net/xyang81/article/details/7292380(该文章举例说明了不同类加载器加载同一份class仍然不能类型互转)转自:http://www.

转自:http://blog.csdn.net/xyang81/article/details/7292380(该文章举例说明了不同类加载器加载同一份class仍然不能类型互转)

转自:http://www.cnblogs.com/xujian2014/p/5551153.html

详细JVM介绍:http://blog.csdn.net/zhoudaxia/article/details/35824249

核心的加载图,理解查找顺序和加载顺序


img_e9862a00b500c6f2a6a68304d3d4b32e.png

自底向上查找直至Bootstrap ClassLoader,如果找不到则从顶向下开始加载,这样子保证如果由父类已经加载了,你们就不用重复加载了,如果父类没有加载,优先由父类进行加载。


ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

System.out.println("系统类装载器:"+ systemClassLoader);

ClassLoader extClassLoader = systemClassLoader.getParent();

System.out.println("系统类装载器的父类加载器——扩展类加载器:"+ extClassLoader);

ClassLoader bootClassLoader = extClassLoader.getParent();

System.out.println("扩展类加载器的父类加载器——引导类加载器:"+ bootClassLoader);

观察ClassLoader类的构造方法可以发现,可以显式指定父类加载器,也可以使用默认的形式。

有些文章或资料上写到“默认的父类加载器为系统类加载器”,“默认的父类加载器为引导类加载器”,这里我又觉得含糊不清了,为什么?

这里可以有两种理解:一、使用ClassLoader() 不带参数的构造方法时其父类加载器是什么。

二、使用ClassLoader(ClassLoader parent)这种传入null作为参数的构造方法时其父类加载器是什么。这两种“默认情况”是不一样的。

当使用ClassLoader(ClassLoader parent)传入null的时候,其父类加载器是引导类加载器(当然,也可以将null理解成引导类加载器);

当使用没有参数的ClassLoader()时,其父类加载器一般为系统类装载器,这个构造方法等价于ClassLoader(ClassLoader.getSystemClassLoader())。

目录
相关文章
|
10月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
325 4
|
12月前
|
存储 缓存 Java
我们来详细讲一讲 Java NIO 底层原理
我是小假 期待与你的下一次相遇 ~
402 2
|
11月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
327 0
|
8月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
374 2
|
8月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
343 1
|
9月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
859 58
|
11月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
618 24
|
12月前
|
XML JSON Java
Java 反射:从原理到实战的全面解析与应用指南
本文深度解析Java反射机制,从原理到实战应用全覆盖。首先讲解反射的概念与核心原理,包括类加载过程和`Class`对象的作用;接着详细分析反射的核心API用法,如`Class`、`Constructor`、`Method`和`Field`的操作方法;最后通过动态代理和注解驱动配置解析等实战场景,帮助读者掌握反射技术的实际应用。内容翔实,适合希望深入理解Java反射机制的开发者。
977 13
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。